【问题标题】:Stalling in a game loop and removing sprites naturally在游戏循环中停止并自然删除精灵
【发布时间】:2009-06-19 05:12:24
【问题描述】:

我正在用 cocos2d 制作一个游戏,我有一堆想要删除的精灵。例如,我可能在屏幕上有一堆角色,但是当我的游戏结束时,我想清理它们。现在我已经创建了一个特殊效果(粒子系统)来分散注意力,但是因为它是透明的并且不会覆盖所有的屏幕,所以当我将它们从图层中移除时,你可以看到并看到精灵消失。

另外,由于指令对用户的执行速度如此之快,以至于在粒子效果开始之前精灵就好像消失了一样!

对我的 2 个问题有什么建议吗?谢谢。

NSMutableArray *toRemove = [[NSMutableArray alloc] init]; // array of sprites that I collect to remove

spriteCount = 0;
    if([self findAllSprites:parent forRemoval:toRemove] > 0){ // is there is at least one sprite to delete. If not then don't do anything
        [self specialEffect]; // runs for maybe 3 seconds. 
                    // how can I stall here so that the sprites aren't removed "instantaneously"?
        for (Character* aCharacter in toRemove) {
            [aCharacter.parent remove:aCharacter];      
        }

}

【问题讨论】:

    标签: iphone objective-c cocos2d-iphone


    【解决方案1】:

    您可以使用 performSelector:withObject:afterDelay: 延迟删除操作。例如:

        NSMutableArray *toRemove = [[NSMutableArray alloc] init]; // array of sprites that I collect to remove
        spriteCount = 0;
        if([self findAllSprites:parent forRemoval:toRemove] > 0){ // is there is at least one sprite to delete. If not then don't do anything
            [self specialEffect]; // runs for maybe 3 seconds. 
            [self performSelector:@selector(removeSprites:) withObject: toRemove afterDelay:1.0];
        }
        [toRemove release];
    
    - (void) removeSprites: (NSArray*) toRemove
    {
        for (Character* aCharacter in toRemove) {
            [aCharacter.parent remove:aCharacter];          
        }
    }
    

    请注意 performSelector:withObject:afterDelay: 将保留 toRemove 对象并使其保持活动状态,直到它调用 removeSprites 之后,因此您不必对 toRemove 执行任何特殊操作(除了您仍然需要释放它,如图所示你也拥有它)。

    【讨论】:

      【解决方案2】:

      您需要在线程中执行“特殊效果”,以便它您的精灵删除一起运行。查找 NSThread 以获取更多信息,但这将使您能够同步两个进程。

      【讨论】:

        猜你喜欢
        • 2016-09-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 2016-11-29
        • 1970-01-01
        • 2017-03-12
        相关资源
        最近更新 更多