落下するブロックをランダムに作成したい。ブロックは GRect または Sprite にすることができますが、どうすればよいかわかりません。
createBlock 関数を呼び出す時間をランダムに選択する必要があります。次に、画面の上部にブロックを作成し、画面の下部に配置する必要があります。最終結果は、画面から落ちるブロックの無限の流れになるはずです。私はランダム間隔の部分にはあまり関心がなく、落下するのに必要な数のブロックを取得することに関心があります。
前もって感謝します!
落下するブロックをランダムに作成したい。ブロックは GRect または Sprite にすることができますが、どうすればよいかわかりません。
createBlock 関数を呼び出す時間をランダムに選択する必要があります。次に、画面の上部にブロックを作成し、画面の下部に配置する必要があります。最終結果は、画面から落ちるブロックの無限の流れになるはずです。私はランダム間隔の部分にはあまり関心がなく、落下するのに必要な数のブロックを取得することに関心があります。
前もって感謝します!
cocos2d がどのように動作するか (レイヤー、シーン、子など) について基本的な理解があると仮定すると、次のようになります。
CGSize winSize = [[CCDirector shareDirector] winSize];
CCSprite *block = [CCSprite spriteWithFile:@"block.png"];
// Generate a random x position
CGFloat x = arc4random() % winSize.width;
// Position the block at a random x, just above the top of the screen
block.position = ccp(x, winSize.height + block.contentSize.height/2);
// Tell the block to fall down to the bottom of the screen over 2 seconds
CCMoveTo *fall = [CCMoveTo actionWithDuration:2 position:ccp(block.position.x, 0 - block.contentSize.height/2)];
[block runAction:fall];
これをブロックの一定のストリームで発生させたい場合は、コールバック関数をセットアップして、「createBlock」関数を頻繁に呼び出すことができます。常にブロックを再作成するのはあまり効率的ではありませんが、画面外のブロックのリストを維持し、必要に応じてそれらを一番上に移動して再び落下させるよりは簡単です。
CCSequence *rainBlocks = [CCSequence actions: [CCCallBlock actionWithBlock:^{
[self createBlock];
}],
[CCDelayTime actionWithDuration:3],
nil]];
[self runAction:[CCRepeatForever actionWithAction:rainBlocks]];
私はそこの構文について 100% ではありませんが、それが一般的な考え方です。