迷失在迷茫的海洋中,我真的希望有人能在这里帮助我。这个问题关于如何正确使用面向对象的编程,这是我似乎无法做到的。
我也在分享我的思路,如果有任何看似有缺陷的请告诉我。
我想做什么:
我正在制作一个SpriteKit游戏,就像所有游戏一样,每一帧都需要运行逻辑。截至目前,我可以运行每一帧的唯一方法是使用我的SKScene的更新方法。
游戏中有玩家,敌人,子弹,障碍物,收藏品,你可以命名。每个人都需要更新每一帧以处理快速变化的环境。我们以“子弹”为例。我的游戏中有一个'子弹'课程。子弹具有需要每帧运行的逻辑。我的班级中有一个'更新'方法来处理这个逻辑,但是我找不到一个好方法来为每个子弹实例运行这个方法。
我尝试了很多方法,而且都很可怕而且效率低下。在很多情况下,我已经误用了OOP之美,以至于邋code的代码几乎无法完成手头的任务。
我需要类似updateAllBullets
方法的东西,但即使存在,我还是需要运行updateAllEnemies
,updateAllItems
,甚至不会处理子类那些游戏对象。这让我相信我在制作这个游戏时被误导了。我真的希望有人能与我合作,建立一个高效的系统,即使这意味着重新设计一切。当然,我并不是要求代码,因为我甚至没有提供任何代码(我可以根据要求提供相关代码),但我反而要求我应该使用的OOP概念。
我很乐意尽快澄清你所拥有的一切。 欢呼声。
答案 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:
呼叫中每个节点的行为。