2011-03-15 38 views
1

在我的游戏的早期开发过程中,我并没有真正考虑游戏如何在玩家被打断的情况下暂停。我认为它不应该太难,所以一旦我完成了游戏的核心,我就把它留下来看看。我想知道我将如何实现在我的Flash游戏中暂停

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

截至目前,我跟着几个教程来到我今天的位置,主要是从ASGamer教程。可以在该网站上找到的预加载器和菜单屏幕教程是我使用的,到目前为止,我遇到了一些问题,我稍后会问。

无论如何,我发现很难围绕我怎样才能暂停或暂停游戏时,用户按下指定的键。我想我应该解释我的游戏如何运作。

我在主时间轴上有3帧。

第一帧适用于预加载器,操作简单。

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

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

一旦preloader完成我的“菜单屏幕”开始,这是我所遵循的教程。它使用UnLoad()和Load()加载和卸载影片剪辑。

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

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

首先我试着创建一个按键处理程序来获取用户的按键。在某一时刻,它的键盘按键正在注册,但在对其他脚本进行了一些更改后,按键不再被识别。所以我将按键移到了我的主要字体,这是我的字体使用的主要脚本。键盘事件工作正常,但现在实际上停止了游戏......我怎么开始?我将不得不停止所有的影片剪辑和eventlisteners,直到用户再次按下指定的暂停按钮,我将如何完成此操作?

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

+0

可能要张贴这样的:http://gamedev.stackexchange.com/ –

+0

很多Flash游戏最基础的动画/物理上的'ENTER_FRAME'事件。所以当游戏需要暂停时,监听器被移除。 – 2011-03-15 20:56:37

回答

3

理想情况下,您的游戏将有一个控制所有动作的单个游戏循环 - 大多数Flash游戏框架将为您提供此功能。某处某处正在侦听Event.ENTER_FRAME并在每个帧上运行逻辑。因此,如果您使用框架构建了游戏,或者使用了访问Event.ENTER_FRAME的一个中心点,则很容易 - 您可以移除侦听器,调用框架的内置暂停函数或创建循环监听器检查“isPaused”布尔标志。

但是,如果你没有使用一个框架,你只需有很多不同的对象真的不知道对方的存在,每个被监听自身的输入框,那么你可能有问题。我认为你基本上必须通过并实现每个暂停功能,这将是粗糙的。

我希望有帮助!

+0

框架?很明显,我一直在以这种错误的方式进行讨论。那么有一个事件监听器可以删除可能会暂停游戏的事件,但是我希望我一开始就知道Framework。谢谢,这有助于我更多地理解Flash。 – RamenNoodles

+0

如果你喜欢老派的2D游戏,Flixel是一款整洁的游戏。 – Sam

+0

Flixel和PushButtonEngine是我认为的两个最受欢迎的。我相信李Brimelow最近开始在gotoandlearn.com上为他们做教程。 是啊,在这一点上我绝不会不使用某种框架的建立在Flash游戏。 ;) – Myk

0

缓解动画问题的一种方法是在游戏暂停时打开游戏画面(在主游戏画面上打开“游戏暂停”窗口),这样您就省去了停止所有动画的麻烦。 如果你喜欢停止动画,我能想到的是注册在阵列中的所有动画对象最简单的办法,这样你就可以停止所有这些,在一个简单的循环再次发挥他们所有。不优雅,但比重构游戏暂停功能更好。

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

相关问题