趣百科

flash游戏制作教程之关卡设计流程

编辑:Simone 2024-10-29 18:19:11 563 阅读

flash游戏制作教程之关卡设计流程

关卡的分类:关卡简言之。其实就是游戏中一个个串连的任务。从开发者的角度考虑,关卡一般可以分为以下两类

第一类:简单参数化关卡

这种游戏的难度级别可以用简单的参数变化来表示。比如汉诺塔游戏,汉诺塔层数的递增就构成了一级级的关卡,又比如扫雷游戏,不同的宽度、高度、雷数的组合形成不同的难度级别等等。

第二类:变换场景的关卡

这类游戏的关卡之间不是通过修改几个参数就可以解决的,它可能完全换了一个场景。其中的变化可能有:地图不同、敌人不同、任务不同等等。这种关卡在角色扮演游戏中比较多见。

总而言之,关卡类游戏可以归结为游戏平台设计、参数设计以及必须和两者关联的程序逻辑设计三个部分。如下图所示:

下面用一个实例给大家介绍:

游戏实例:战场生存过关版

现在我们将前面设计的游戏“战场生存记”改为带关卡的游戏。每个关卡的大炮数量不同,有的关卡还有地雷。只要玩家能够坚持住一定的时间即进入下一关。

先设计这个游戏的主流程图,如下图所示:

其中关卡数可以继续添加。具体设计时将此流程图的每个过程对应为Flash中的一帧或者连续的几帧,注意帧之间的跳转应尽量使用帧标签以适应开发时帧数的变化。

关卡是一段连续的帧,其程序结构如下图所示:

在关卡初始化阶段完成本关卡游戏场景的准备,布置大炮、地雷,以及初始化游戏场景。初始化完成后即进入游戏阶段,当游戏任务完成或者失败,在退出关卡之前,那些以后不再使用到的资源、代码,都要清除干净,以免影响程序的其它部分。

这里我们沿用战场生存记的角色和基本界面。故而这部分程序不再讲解。

具体步骤:

1.设计地雷角色

地雷角色与炮弹角色非常相似,但更简单,因为它不需要移动。这里仅给出其第1帧代码,角色的其余部分读者自行完成。

2.组织游戏程序

这个游戏完成时的时间轴如下图所示:

第1帧是游戏开始界面以及各个具体的函数。接下来是四个关卡,最后两帧分别是胜利/失败界面和全部过关界面。

角色图层放置着英雄角色实例(hero)、大炮和地雷等等。这些实例都是从库中直接拖出来,在可视化环境下布置好即可,不需要添加任何代码。

与战场生存记相比,程序多了几个变量,它们分别是level(当前关卡)、totalLevel(关卡总数)、totalTime(关卡时限)、victory(胜利/失败)。这些变量在初始化程序和判断游戏流程时使用到。计时方式改为倒计时,判断游戏成败的方式亦有所不同。总之,第1帧的代码,与前一个游戏不同的部分如下所示:

var level:int=1;

var totalLevel=4;

var totalTime:int;

var victory:Boolean;

function startGame(e:MouseEvent) {

gotoAndPlay("level"+level);

}

function init() {

victory=false;

time=totalTime;

timeCountShow.text=String(time);

levelShow.text=String(level);

startTime=new Date();

hero.gotoAndStop("stop");

stage.addEventListener(KeyboardEvent.KEY_DOWN,heroRun);//跑动

stage.addEventListener(KeyboardEvent.KEY_UP,heroStop);//取消跑动

stage.addEventListener(Event.ENTER_FRAME,checkGame);//检查游戏是否结束

}

function checkGame(e:Event) {

showTime();

if (hero.status=="dead") {

play();//游戏失败,播放到关卡结束帧

}

if (time<=0) {

hero.status="victory";

victory=true;

play();//游戏胜利,播放到关卡结束帧

}

}

function showTime() {

endTime=new Date();

time=int((endTime.getTime()-startTime.getTime())/1000);

time=totalTime-time;//倒计时

timeCountShow.text=String(time);

}

在关卡的起始帧进行关卡初始化,由于关卡的大部分功能都由自动化的剪辑完成,所以这段代码非常少,例如第一关的初始化代码为:

totalTime=15;

init();

stop();

即游戏初始化后播放头停止,进入游戏中状态。

关卡结束帧负责处理垃圾清理工作,这里仅清除三个事件处理函数,其它垃圾的清理交给垃圾回收机制处理。这是取巧的方法,如果你的关卡结束后程序出现异常,那么估计就是垃圾没有清理完全的缘故。

stage.removeEventListener(KeyboardEvent.KEY_DOWN,heroRun);

stage.removeEventListener(KeyboardEvent.KEY_UP,heroStop);

stage.removeEventListener(Event.ENTER_FRAME,checkGame);

gotoAndStop("result");

其它几个关卡的初始化和垃圾清理代码与此类似,不再赘述。

成功/失败界面显示过关成功或者失败,并决定游戏的下一步走向。其代码如下:

stop();

if (level>=totalLevel&&victory==true) {

gotoAndStop("win");//胜利画面

} else {

if (victory) {

level++;

txtResult.text="闯关成功";

} else {

txtResult.text="闯关失败";

}

bt_continue.addEventListener(MouseEvent.MOUSE_DOWN,startGame);

}

游戏结束画面较为简单,代码如下:

stop();

level=1;

bt_restart.addEventListener(MouseEvent.MOUSE_DOWN,startGame);

它表示如果点击重玩按钮,游戏将重新从第一关开始玩。

3.测试游戏,直到达到预期的效果。

下图为这个游戏运行中的一个截图:

至此我们完成了过关类游戏的设计。

版权声明:本站【趣百科】文章素材来源于网络或者用户投稿,未经许可不得用于商用,如转载保留本文链接:https://www.qubaik.com/article/38587.html

相关推荐