我正在flash中的空间环境中创建2D多人游戏(使用flex builder 3的actionscript 3)。玩家的角色(船只)将始终位于中心。因为它必须看起来像船在移动,而它实际上总是在中心,背景和所有环境对象必须以相反的方式移动。
我对如何做到这一点的想法是创建一个数组,其中包含对环境中所有对象的引用。然后它们将被循环,它们的位置将在船舶运动的相反方向上改变。
然而,我担心这看起来不会很顺利,或者会太慢。它可能会导致“口吃”?因此,在我开始开发这样的系统之前,我想知道是否有更好的选择 - 或者是否有人有我想做的经验。提前致谢。
答案 0 :(得分:2)
不,这是最有效的方法...并隐藏所有不在屏幕上的项目,以保存性能......如果这些对象仅移动,则应考虑flash.display.DisplayObject::cacheAsBitmap,以获得更好的性能。 ..
替代方案是,将所有项目放入一个Sprite,屏蔽它,然后在Sprite周围移动......这只有在你的世界有限的情况下才能正常工作......并且只有在它是小...所以我想,这是没有选择......
格尔茨
back2dos
答案 1 :(得分:0)
嗯,您需要跟踪所有对象,但您只需要在任何给定时间实际上担心少量对象。
这样做的一个简单方法是将您的游戏区域划分为一个象限网格(最终使用的数量将取决于您)。单个象限可以包含多个不同的显示元素。然后你只需要确定你的船位于哪个方位。从那里你可以计算出你需要扫描的最小象限数量来绘制船舶周围的区域。
当元素在游戏区域内移动时,您只需要确保它们不断更新它们所在的象限。
答案 2 :(得分:0)
由于这是一款多人游戏,Branden Hall的方法更适合您的需求,因为您可以轻松发送播放器周围另一艘船存在的通知(这比向用户提供所有信息更好)他们周围的非屏幕元素)我只想补充一点,根据视口的大小,屏幕上的象限数量可能会有所不同,你应该总是检查当前象限的边界,看看是否在其上显示了相邻的象限。视口。