【发布时间】:2014-02-20 16:18:29
【问题描述】:
我有一个游戏,我需要在屏幕上呈现具有从右到左飞行路径的敌人 (SKSpriteNodes)。我目前把它做成苹果的冒险游戏,有两个数组:一个是活跃的敌人,一个是不活跃的;两者的容量都是 10。当游戏需要添加一个敌人(通过 update 方法)时,它会从 inactive 数组 中取出一个,将其作为子元素添加并放入它在活动数组中。当敌人完成它沿着屏幕的路径或当它被摧毁时,我从 active 数组 中取出它,将它从它的父级中移除,并将它放在 inactive 数组的索引 0。
代码:
添加敌人:
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个就不够了。
我应该保持这种风格并在我没有剩余的时候尝试修改数组的大小吗?我应该采取另一种方法并停止使用数组并在需要时初始化敌人吗?
【问题讨论】:
-
您的问题似乎是您可以使用多大的精灵池,或者您是否应该使用精灵池。这取决于您的游戏,这不是某人能够为您回答的问题。制作你的游戏,并处理出现的问题。如果您想在实际遇到该主题之前了解更多有关此主题的信息,您可以谷歌和/或阅读此en.wikipedia.org/wiki/Object_pool_pattern
-
感谢您的链接。正如其中所述,在某些情况下,简单的对象池(不保存外部资源,但只占用内存)可能效率不高,并且可能会降低性能。。好吧,我认为这里不是这种情况。这些是 SKSpriteNode 的自定义类,它们使用图像加载、物理并在构造函数中初始化不同的对象。所以,至少现在,我会这样。
-
我认为这里接受的答案是 100%,您正在着手进行过早的优化。但是,学习池化以及它适用和不适用的情况并没有错,所以你知道。
标签: memory-management sprite-kit skspritenode