我有一个游戏,我需要在屏幕上呈现从右到左的飞行路径的敌人(SKSpriteNodes)。我现在做的就像苹果的冒险游戏,有两个阵列:一个是活跃的敌人,另一个是非活动的;两者都有10的容量。当游戏需要添加一个敌人(通过更新方法)时,它从非活动数组中获取一个,将其作为一个孩子添加并放置它在活动数组中。当敌人在屏幕上完成它的路径或者它被销毁时,我从活动数组中取出它,从它的父节点中删除它,并将它放在非活动数组<的索引0处/ em>的
代码:
添加敌人:
enemySN = [_asteroidsInactiveMArray lastObject];
[enemySN removeFromParent];
[_asteroidsInactiveMArray removeLastObject];
[_asteroidsActiveMArray addObject:enemySN];
[self addChild:enemySN];
移除敌人:
[enemySN died];
[_aliensActiveMArray removeObject:enemySN];
[_aliensInactiveMArray insertObject:enemySN atIndex:0];
我担心的是:目前,10个敌人足以进行当前设置,但是如果我想要增加屏幕上添加的敌人,那么10个就不够了。
我应该保留这种风格并尝试在没有任何左边时修改数组的大小吗?我应该采取另一种方法并停止使用阵列,并在需要时初始化敌人吗?
答案 0 :(得分:2)
这是Premature Optimization的情况。
你甚至不知道可能的问题 - 它可能是内存使用,可能是搜索阵列所花费的时间,添加/删除元素,它不可能是在你遇到填充限制之前任何问题都会阻止你在你的算法甚至变得没那么低效之前在屏幕上绘制更多的敌人。
您甚至可能会发现当前的方法比重新创建精灵更慢,因此您需要更改它。但是,这种新方法成为一个重要问题,因为它也没有扩大规模。您只能通过测试和测量找到,但同样:过早优化。
修复实际存在的问题;不要追逐&#34; maybes&#34;。
NSMutableArray的大小不像C数组一样固定。如果向其中添加更多项目,NSMutableArray将动态增长,并在删除项目时相应缩小。