为目标c中的所有类实例调用更新方法?

时间:2013-12-30 07:05:35

标签: objective-c oop updates sprite-kit

迷失在迷茫的海洋中,我真的希望有人能在这里帮助我。这个问题关于如何正确使用面向对象的编程,这是我似乎无法做到的。

我也在分享我的思路,如果有任何看似有缺陷的请告诉我。

我想做什么:

我正在制作一个SpriteKit游戏,就像所有游戏一样,每一帧都需要运行逻辑。截至目前,我可以运行每一帧的唯一方法是使用我的SKScene的更新方法。

游戏中有玩家,敌人,子弹,障碍物,收藏品,你可以命名。每个人都需要更新每一帧以处理快速变化的环境。我们以“子弹”为例。我的游戏中有一个'子弹'课程。子弹具有需要每帧运行的逻辑。我的班级中有一个'更新'方法来处理这个逻辑,但是我找不到一个好方法来为每个子弹实例运行这个方法。

我尝试了很多方法,而且都很可怕而且效率低下。在很多情况下,我已经误用了OOP之美,以至于邋code的代码几乎无法完成手头的任务。

我需要类似updateAllBullets方法的东西,但即使存在,我还是需要运行updateAllEnemiesupdateAllItems,甚至不会处理子类那些游戏对象。这让我相信我在制作这个游戏时被误导了。我真的希望有人能与我合作,建立一个高效的系统,即使这意味着重新设计一切。当然,我并不是要求代码,因为我甚至没有提供任何代码(我可以根据要求提供相关代码),但我反而要求我应该使用的OOP概念。

我很乐意尽快澄清你所拥有的一切。 欢呼声。

1 个答案:

答案 0 :(得分:1)

如何在enumerateChildNodesWithName:循环中使用-update:方法?

例如,在我的代码中,我正在使用

-(void)update:(CFTimeInterval)currentTime
{
    /* Called before each frame is rendered */

    [self enumerateChildNodesWithName:@"projectile" usingBlock:^(SKNode *node, BOOL *stop) {
        if (node.position.x < 0 || node.position.x > self.frame.size.width || node.position.y > self.frame.size.height)
        {
            [node removeFromParent];
        }
    }];
}

我只需要给每个射弹(或子弹)命名为“射弹”,并使用它我可以控制每个-update:呼叫中每个节点的行为。