Ну, если у вас есть общее представление о том, как работает 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% от синтаксиса, но это общая идея.
Большое спасибо. Он отлично работал. В итоге мне пришлось использовать изменяемый массив, чтобы следить за выключенным экраном и блоками экрана так же, как вы сказали. – sbjluke