【问题标题】:I would like to know how I would be able to implement pausing in my flash game我想知道如何在我的 Flash 游戏中实现暂停
【发布时间】:2011-03-15 20:36:32
【问题描述】:

在我的游戏的早期开发过程中,我并没有真正考虑过如果玩家被打断,游戏将如何暂停。我认为它应该不会太难,所以我把它留作我完成游戏核心后会研究的东西。

我现在在这里,无论如何,从我的角度来看,试图找出暂停游戏的方法非常困难。

到目前为止,我遵循了一些教程来达到今天的成就,主要是来自 ASGamer 的教程。可以在该站点上找到的预加载器和菜单屏幕教程是我使用的,到目前为止,我遇到了一些问题,稍后我会问。

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

我的主时间轴中有 3 帧。

第一帧用于预加载器,很简单。

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

第三帧是stop();行动。

一旦预加载器完成我的“菜单屏幕”启动,这就是我遵循的教程。它使用 UnLoad() 和 Load() 加载和卸载影片剪辑。

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

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

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

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

【问题讨论】:

  • 可能想把这个发布到:gamedev.stackexchange.com
  • 很多 Flash 游戏的大部分动画/物理都基于 ENTER_FRAME 事件。所以当游戏需要暂停时,监听器就会被移除。

标签: flash actionscript-3 flash-cs5


【解决方案1】:

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

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

但是,如果您没有使用框架,并且您只有许多不同的对象,它们彼此并不真正了解,并且每个对象都在自己侦听输入帧,那么您可能会遇到问题。我认为你基本上必须经历并在每一个上实现暂停功能,这很粗糙。

希望对你有帮助!

【讨论】:

  • 框架? ......显然我一直在以错误的方式解决这个问题。好吧,我可以删除一个可能会暂停游戏的事件监听器,但我希望我一开始就知道框架。谢谢你帮助我更多地了解Flash。
  • 如果您喜欢老式 2d 游戏,Flixel 是一款不错的选择。
  • Flixel 和 PushButtonEngine 是我认为最流行的两个。我相信 Lee Brimelow 最近开始在 gotoandlearn.com 上做关于它们的教程。是的,在这一点上,如果不使用某种框架,我永远不会在 Flash 中构建游戏。 ;)
  • @RamenNoodles 你不需要框架来制作游戏,但将所有游戏更新集中在一个地方有一个明显的优势。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-03-06
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    相关资源
    最近更新 更多