我想知道如何在我的Flash游戏中实现暂停

时间:2011-03-15 20:36:32

标签: flash actionscript-3 flash-cs5

在游戏的早期开发过程中,我并没有真正考虑过如何在玩家被打断的情况下暂停游戏。我认为这不应该是太难了所以我把它留作我在游戏核心完成时会看到的东西。

我现在在这里,无论如何,试图找出一种暂停我的游戏的方法非常困难。

截至目前,我已经按照一些教程来了解我今天所处的位置,主要是来自ASGamer的教程。可以在该站点找到的预加载器和菜单屏幕教程是我使用过的,到目前为止,我遇到了一些问题,我稍后会问。

无论如何,我发现当用户按下指定键时,我很难理解如何暂停或暂停游戏。我想我应该解释一下我的游戏是如何运作的。

我的主时间轴中有3帧。

第一帧是预加载器,简单。

第二帧是游戏的所在。它拥有我的资产持有者,并且在该框架上运行我的所有脚本。

第三帧是停止();动作。

预加载器完成后,“菜单屏幕”启动,这是我遵循的教程。它使用UnLoad()和Load()加载和卸载动画片段。

我使用Load()加载开始时发生的主菜单,然后使用UnLoad()卸载当前菜单,然后加载下一个指定的菜单,例如Main Menu - >我使用的游戏Unload(new GameMenu(stage));舞台经常与这些菜单来回传递,因此有时会让人感到困惑。

在GameMenu是我运行游戏的地方,我制作了一个扩展MovieClip的GamePlay类。从那里它产生了玩家和敌人,并作为一个正常的游戏玩,这是我的问题开始。

首先,我尝试创建一个密钥处理程序来获取用户的按键操作。有一次,按键操作正在进行注册,但在我对其他脚本进行了一些更改之后,按键不再被识别。所以我将按键移动到我的Main.as,这是我的fla使用的主要脚本。键盘事件工作正常,但现在实际上停止游戏......我怎么开始?我必须停止所有的动画片段和事件处理器,直到用户再次按下指定的暂停按钮,我将如何完成此操作?

我在某处读到使用状态机是在任何游戏中暂停的最佳选择,但我不知道如何做到这一点但我确信有一些教程和博客我可以阅读以制作状态机,但如果我添加一个或制作一个,我将不得不重做我的所有代码以适应状态机吗?

2 个答案:

答案 0 :(得分:3)

理想情况下,您的游戏将拥有一个控制所有操作的游戏循环 - 大多数Flash游戏框架都会为您提供此功能。在某个地方,某些东西正在侦听Event.ENTER_FRAME并在每个帧上运行逻辑。

因此,如果您使用框架构建游戏或使用对Event.ENTER_FRAME的一个中心访问点,那么很容易 - 您可以删除侦听器,调用框架的内置暂停函数或制作循环侦听器检查“isPaused”布尔标志。

但是,如果您没有使用框架,并且您只是拥有许多不完全了解对方的不同对象,并且每个对象都在自己监听输入框架,那么您可能会遇到问题。我认为你基本上必须经历并在每一个上实现暂停功能,这将是粗糙的。​​

我希望有所帮助!

答案 1 :(得分:0)

缓解动画问题的一种方法是在游戏暂停时隐藏您的游戏屏幕(在主游戏屏幕上打开“游戏暂停”窗口),这样您就可以省去停止所有动画的麻烦。 如果您更喜欢停止动画,我能想到的最简单的解决方案是在数组中注册所有动画对象,这样您就可以将它们全部停止并在一个简单的循环中再次播放它们。不优雅,但比重构你的游戏暂停功能更好。

您肯定需要保留一个“isGameRunning”布尔变量,您将在用户输入函数(键盘事件和鼠标事件),游戏逻辑函数(输入框架)以及可能在播放声音之前检查该变量。此变量将为您节省删除和重新添加事件的麻烦。

相关问题