游戏暂停的实现方式(1/2)

不知道还有没有人记得我曾经说过自己在做一个FlappyBird用来练手,当时的进度是完成了基本的开始游戏、计分和死亡检测之类,但是后来就没再继续,这两天想了想还是准备捡一捡,然后就想先做一个暂停的功能。
Flappy Bird的暂停界面属于现在手机游戏特别典型那种,当玩家按下暂停按钮以后在当前的画面至上浮出一个暂停菜单,菜单里一般有“继续”,“重新开始”,“退出游戏”等一些基本的选项操作,如果玩家按下“继续”那就要回到游戏界面可以继续操作。
说起来并不复杂,而原理其实同样简单,通常来说有两种思路:

  • 制作一个专门的“暂停菜单”的游戏场景(room),当用户点击暂停以后跳转到那个场景
  • 在用户按下暂停按钮的同时把当前画面截屏并设置为背景画面,同时把场景中所有的对象全部禁用(deactivate),然后创建一个新的暂停菜单的对象供用户操作

今天先介绍第一种方法(才不是因为这种方法比较简单orz)
在介绍这之前,我们首先要了解游戏场景的一个自身属性"persistence"——持久化,当把这个属性设置为Ture并离开该场景后,场景中的所有数据都会保存为你离开时的状态,并会以该状态被直接带入下一个场景,之后你再回到这个场景就可以继续所有刚才未完成的操作。
了解了这个属性以后就很容易了,我们首先需要制作一个没有背景的暂停菜单的游戏场景

然后当我们在游戏场景中按下暂停按键后只需要简单的两行即可

room_persistent = true;     //把持久化属性设置为true
room_goto(room_pause);  //跳转去暂停菜单场景
global.current_room = room //把当前场景保存到一个全局变量中

如果我们要继续游戏,只需要给“Continue”按钮的对象中增加一个点击事件

room_goto(global.current_room);   //返回暂停前的游戏场景

这里我们用了一个全局变量来记录暂停前的游戏场景,这个操作是针对于一些拥有多个游戏场景的游戏而设置的,如果你的游戏十分简单,像FlappyBird一样只有一个固定的游戏场景,完全也可以写死跳转的roomid也能达到相同效果,不过为了培养良好的习惯最好还是不要用写死的方法。


今天介绍的方法真的很简单,不过可能会相对稍微多占用一些内存。
毕竟要把暂停前的游戏数据都临时存起来,但是对于一些小游戏而言也基本够用了:)
PS. HB的教程第10章已经传到B站了,点击原文直达,求一波收藏~XDDD

2017-09-23 19:57
Comments
Write a Comment