Flash如何处理场外元素?
显然,Flash实际上并没有渲染它们(因为它们不会出现在屏幕上的任何地方),但是渲染它们的过程仍然存在,如果元素在屏幕上,就会减慢我的游戏速度?
或者Flash是否会智能地忽略不属于可渲染区域的元素?
我是否应该手动管理从DisplayList
移除对象并将其重新添加为退出并进入舞台,或者这是否无关紧要?
答案 0 :(得分:2)
是的,他们正在放慢你的游戏速度。
在我早期的一个实验中,我开发了一个侧面滚轮游戏,其中许多NPC散落在地图上,而不是在同一个屏幕上都可见。我仍然需要计算东西,但它们不在屏幕上。当我在不相关的情况下处理从显示列表中删除时(通过简单地检查与“相机”相关的X),性能明显更好。同样,我不是在谈论可能附加到他们身上的其他代码和事件,只是一个动画片段的简单图形子项。
根据我的经验,最好的做法是在位图中绘制对象。当然,如果你已经深入游戏,这可能是无关紧要的,但如果你有时间投资,这是最有效的方法之一,以充分利用AS3的2D游戏。我在8bitrocket中找到了一些关于位图和AS3的最好的教程 http://www.8bitrocket.com/books/the-essential-guide-to-flash-games/如果你愿意,我可以详细说明这个问题,但我想我会在这里讨论主题。
答案 1 :(得分:0)
即使某些显示对象位于舞台区域之外,它们仍然会被执行。如果他们有任何动画播放,那可能会降低演奏速度。
问题出现了,为什么我们需要将未使用的物品留在舞台区域之外?如果你需要“缓存”movieClip以加快加载速度,那么将它们加载到控件永远不会出现的关键帧中。例如。加载要在第1帧中显示的显示对象,然后在框架的操作面板中放置一个stop(),使其成为关键帧,并在第2帧中加载未使用的动画。因为第1帧中有一个stop(),所以控件永远不会进入第2帧,但显示对象会被缓存。
或者,如果您在未使用的displayobjects中有代码,因此需要将它们与主游戏组件一起加载,那么,尝试将stop()放在未使用的显示对象的框架中,以便它们不会生成动画。