2010-09-28 76 views
4

我能夠使目標沿着屏幕的頂部隨機產生並消失在屏幕的底部。唯一的問題是每次只有目標移動到一個固定點。我希望他們移動到屏幕底部的隨機點。有任何想法嗎? 謝謝。隨機雪碧目的地

下面是代碼:

- (無效)addTarget {

CCSpriteSheet *sheet = [CCSpriteSheet spriteSheetWithFile:@"meteorImgs.png" capacity:50]; 
[self addChild:sheet]; 
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"metImg.plist"]; 

target = [CCSprite spriteWithFile:@"Frame2.png" rect:CGRectMake(0, 0, 60, 120)]; 


CGSize winSize = [[CCDirector sharedDirector] winSize]; 
int minY = target.contentSize.height/2; 
int maxY = winSize.width*1.5 - target.contentSize.height/2; 
int rangeY = maxY - minY; 
int actualY = (arc4random() % rangeY) + minY; 

target.position = ccp(actualY, target.contentSize.height*5); //- (-target.contentSize.height/2), actualY); 
[self addChild:target]; 

int minDuration = 2.0; 
int maxDuration = 4.0; 
int rangeDuration = maxDuration - minDuration; 
int actualDuration = (arc4random() % rangeDuration) + minDuration; 

id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(160,0)]; 
id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)]; 
[target runAction:[CCSequence actions:actionMove, actionMoveDone, nil]]; 

}

上一個:

您好,

我用Ray Wenderlich's code此。我的問題是,如何讓目標在縱向模式下產生在屏幕的頂部,並移動到屏幕的底部。不管我改變什麼,都沒有發生。現在,正如教程所說的那樣,目標從右向左移動。

我想要做的(應該是更具體)是,而不是使目標從屏幕的右側移動到左側,我希望他們從頂部移動到屏幕的底部。(從上到下)。不知何故,代碼告訴目標產生在右側,但我不知道它在哪裏。這是代碼的主要內容,沒有別的可能影響目標的位置。

-(void)addTarget { 



CCSprite *target = [CCSprite spriteWithFile:@"dude_jump.png" 
      rect:CGRectMake(0, 0, 30, 60)]; 

CGSize winSize = [[CCDirector sharedDirector] winSize]; 
int minY = target.contentSize.width/2; 
int maxY = winSize.width - target.contentSize.width/2; 
int rangeY = maxY - minY; 
int actualY = (arc4random() % rangeY) + minY; 

target.position = ccp(winSize.width + (target.contentSize.width/2), actualY); 
[self addChild:target]; 

int minDuration = 2.0; 
int maxDuration = 4.0; 
int rangeDuration = maxDuration - minDuration; 
int actualDuration = (arc4random() % rangeDuration) + minDuration; 

id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(-target.contentSize.width/2, actualY)]; 

id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)]; 
[target runAction:[CCSequence actions:actionMove, actionMoveDone, nil]]; 
} 
+1

海僞裝這是怎麼回事? – Will 2010-09-29 11:40:04

+0

感謝您的支持。更好地去除噪音。 :-) – 2010-09-29 14:09:56

回答

1

(說實話,這很可能是減少混亂張貼另一個問題,但我會在這裏反正回答這個問題:P)

你行:

id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(160,0)]; 

就是告訴精靈在哪裏移動。如果你想隨機化它,你需要確保在那個x位置包含某種隨機函數。

arc4random()函數生成一個隨機數。你需要做的是一點點數學,以確保它會選擇一個仍然會出現在屏幕上的x位置,並將它提供給你的移動動作。

int randomX = arc4random() % something; // fill in how you want to restrict your x value so that the sprite stays on the screen! 
id actionMove = [CCMoveTo actionWithDuration:actulDuration position:ccp(randomX, 0)]; 

在另一方面,正如編碼實踐的東西,你可能最好關閉不使用的原始號碼,如160,0,等在你的代碼。把它們放到變量中(或者如果它們在多個文件中使用,則爲#defines)。這樣,當你想在未來調整事情時,你只需要在一個花邊中更改這些數字,而不是遍及你的代碼!

希望這會有所幫助。祝你好運!

+0

對不起,我很困惑。很多人只是告訴我編輯同一個問題,而不是創建一個新問題。 – tallen11 2010-10-01 00:14:58

+0

非常感謝。這解決了我的問題! – tallen11 2010-10-01 00:17:56

+0

不用擔心。很高興你得到它運行:) – 2010-10-01 00:20:58

0

不管我改變,沒有什麼 真的發生。

你試過什麼改變?

具體而言,我沒有看到任何代碼檢查橫向與縱向模式的代碼,或有條件地嘗試根據某些查詢屬性更改座標。

+0

這是我不明白的。 Hmmmm。 – tallen11 2010-09-29 00:05:38

+1

也許如果你添加一個鏈接到代碼片段的源代碼,我們可以看到一個小的上下文。 – 2010-09-29 00:09:57

+0

在這裏,你去... http://www.raywenderlich.com/352/how-to-make-a-simple-iphone-game-with-cocos2d-tutorial – tallen11 2010-09-29 00:10:53

1

下面的代碼設定目標

int minY = target.contentSize.width/2; 
int maxY = winSize.width - target.contentSize.width/2; 
int rangeY = maxY - minY; 
int actualY = (arc4random() % rangeY) + minY; 

target.position = ccp(winSize.width + (target.contentSize.width/2), actualY); 

當前,通過randomises的範圍內可變actualY設置爲隨機數y位置的開始位置。 要更改它以使y位置始終位於屏幕的底部,您需要更改actualY變量。

int actualY = target.contentSize.height/2; 

這應該將目標放置在屏幕底部開始。請注意,由於我沒有對x參數進行任何更改,因此它將始終顯示在右下角。我相信你可以弄清楚如何改變x參數!

至於改變它的移動方向,這是在下面的行。

id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(-target.contentSize.width/2, actualY)]; 

這創建了Cocos2D調用Action的內容。這個特殊的是將精靈移動到指定的位置。該位置在該函數調用中設置。

如果你嘗試:

id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(-target.contentSize.width/2, winSize.height)]; 

它應該開始向上移動,因爲移動現在的目標是高於一切的起點。請注意,使用此函數調用時,其向左移動將繼續,因爲我沒有在x方向上定義不同的目標 - 我認爲您可以根據其餘的方法找出如何使其停止的方法!

祝你好運,希望這有助於!

+0

非常感謝!這解決了幾個小時的挫折! – tallen11 2010-09-29 22:55:14