我正在制作一个侧面滚动的 Flash 游戏。该级别是预先制作的,因此没有在运行时产生的对象。现在我把这个关卡做得很长,但是在编辑器窗口中它突然停止了。但在游戏中它仍然滚动。
这是在编辑器中。可以看到滚动条不能再向左了:
在游戏中:
该级别比编辑器中显示的要长。起初它只是在场景的边界放置一个物体来增加它。但这不再起作用了。如何增加场景宽度?
在任何给定时间,您可以在舞台上显示的图像大小都有限制。看起来您可能正在突破该限制,这就是您无法再查看的原因。
这有多种原因,但归结为 Flash DisplayList 相对较慢,就 Flash 进程而言。当您在舞台上处理大量内容时,Flash 必须了解每一个对象,如果您在上面的内容超出您的需要,您将获得糟糕的性能。
但是,不要绝望!有办法解决这个问题。
您需要知道的第一件事是此限制适用于舞台上的位图。你可以在你的项目中拥有一个大得多的位图——只要你不试图一次显示整个东西。
大多数游戏框架解决这个问题的方式是这样的:
1)您在幕后存储所有图像数据,并在那里进行所有图像处理等。
2) 在每一帧上,您都使用 copyPixels() 来抓取将出现在舞台上的较大图像的一部分。这意味着如果您的舞台视图仅显示 640x480 像素,那么您只需复制与这些尺寸相等的较大图像的一部分。
3) 在舞台上,您只有一个位图,您可以在第二步中将来自 copyPixels() 的位图数据写入其中。
这被称为“Blitting”,如果这听起来有点复杂,那是因为它是。但是,正如我所说,许多游戏框架将为您完成繁重的工作。查看 Flixel 或 PushButtonEngine,这是两个最流行的框架。
听起来您当前的方法需要进行一些调整才能使其以这种方式工作,但从长远来看,我会推荐它-您的游戏将变得更易于管理,您将获得更好的性能并且您赢了不必求助于其他类型的黑客来让你的关卡加载整个过程。
(快速简便的解决方案是将您的背景分成几张图像,然后随时将它们换掉,但同样 - 这会在渲染引擎上投入大量工作,这通常不是您想要繁重的地方)。
祝你好运!