我开发了一个2D射击游戏,其中包含许多对象和激进的滚动。
问题:哪种方法更好?
选择1-使用本机Flash渲染:
选择2-使用“位图+ copyPixels”编写自定义渲染
在此question中,有些人抱怨“位图+ copyPixels()”很慢。
实验:我已经实现了两种技术:
请尝试一下,告诉哪个更好(更快,更流畅,吃更少的CPU)。
等到至少有250个敌人(屏幕上方的计数器)。
更新:尝试打开任务管理器(或$ top)并查看总体CPU使用率
更新2:我更改了代码,现在蠕变的生成速度更快。
最佳答案
更新:感谢您的高压力版本。再说一次,我真的看不到有什么区别。但是我巧妙地发现“r”掉落了炮塔,当我掉下20-30个炮塔时,本机版本比手动版本要慢一些,所以也许我错了。 (我没有看到内存使用上的差异。)看起来本来的事情本来应该具有更快的潜力,但是很可能它需要对某些不透明的类型进行专门处理。
既然接受了这一点,我将添加一条注释,以使我在注释中的回答更清楚:如果您的所有 Assets 本身都是位图,那么正如HanClinto所指出的那样,发现手动合成它们的速度会比原来快就不足为奇了。制作本机对象并让Flash完成工作,因为它消除了与显示对象(如事件结构)相关的开销。
但是,在某些情况下,手动处理可能会胜出,例如,如果您需要将 vector 内容渲染到位图中,或者需要绘制许多动画精灵,或者您需要检测 Actor 上的鼠标事件(如果您自己进行合成,则需要手动进行,也许很痛苦)。
因此,如果您不需要做任何会减慢手动合成的操作,那么它肯定是最好的答案,如果您这样做,则尝试两种方法都是绝对可以肯定的最佳方法。 (也可以使用混合模型,在该模型中,您需要制作一层需要鼠标事件的本机对象,并用一层人工合成的位图对其进行叠加或覆盖。)
关于flash - 游戏开发人员的Flash性能:原生渲染与BitmapData帧缓冲区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1018074/