2009-06-29 22 views
0

我在flash中创建了一个空间环境中的2D多人游戏(ActionScript 3与flex builder 3)。玩家的角色(船)将始终处于中心位置。因为它看起来像船正在移动,而它实际上总是在中心,所以背景和所有环境对象必须以相反的方式移动。Howto在2D动作/ flex 3(flash)游戏中创建地图滚动?

我想到如何做到这一点,将创建一个数组引用环境中的所有对象。然后这些将会循环,并且它们的位置将在船的移动的相反方向上改变。

但是,我担心这看起来不顺畅,或者会太慢。它可能会导致“口吃”?因此,在我开始开发这样的系统之前,我想知道是否有更好的选择 - 或者如果有人有我想要做的事情的经验。

在此先感谢。

回答

2

不,这是最有效的方法...并且隐藏所有不在屏幕上的项目以节省性能......如果这些对象只是移动,那么应该考虑使用flash.display.DisplayObject::cacheAsBitmap以获得更好的性能......

替代方法是,将所有项目放入一个Sprite中,将其遮罩,然后移动Sprite ......如果您的世界是有限的,这将只能正常工作......并且只会执行正常,如果它是小......所以我想,这是没办法......

格尔茨

back2dos

+0

来自doc的引用:“cacheAsBitmap属性最适用于大多数情况下为静态内容且不经常缩放和旋转的影片剪辑。” - 不幸的是,我的物体旋转了很多。 – Tom 2009-06-29 14:23:45

0

那么,你需要跟踪所有的对象,但是你应该只需要在任何时候真正担心少量的对象。

这样做的一个简单方法是将您的游戏区域划分为一个象限网格(您最终使用的多少取决于您)。单个象限可以包含多个不同的显示元素。那么你只需要弄清楚你的船位于哪个方格。从中你可以计算出你需要扫描的象限的最小数量。

随着元素在游戏区域移动,您只需确保它们不断更新它们所在的象限。

0

由于这是一款多人游戏,Branden Hall的方法更适合您的需求,因为您可以轻松发送播放器周围其他船只的存在通知(这比向用户提供所有非屏幕上的元素)我会补充一点,根据视口的大小,屏幕上象限的数量可能会有所不同,您应该经常检查当前象限的边界以查看是否显示了相邻象限视口。