【问题标题】:cocos-2d: Randomly Falling Blockscocos-2d:随机下落的块
【发布时间】:2013-04-27 07:15:29
【问题描述】:

所以我想随机创建下落块。这些块可以是 GRects 或 Sprites,我只是不知道如何去做。

我需要随机选择一个时间来调用 createBlock 函数。然后我需要它在屏幕顶部创建一个块,该块落到屏幕底部。最终结果应该是无穷无尽的方块从屏幕上掉下来。我不太关心随机间隔部分,而更关心获得尽可能多的块。

提前致谢!

【问题讨论】:

    标签: iphone cocos2d-iphone


    【解决方案1】:

    好吧,假设您对 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% 了解那里的语法,但这是一般的想法。

    【讨论】:

    • 非常感谢。它工作得很好。正如你所说的,我最终不得不使用一个可变数组来跟踪屏幕外和屏幕上的块。
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    相关资源
    最近更新 更多