《游戏脚本的设计与开发》

您所在的位置:网站首页 游戏地图界面 《游戏脚本的设计与开发》

《游戏脚本的设计与开发》

2024-07-05 01:40| 来源: 网络整理| 查看: 265

注意:本系列教程为长篇连载无底洞,半路杀进来的朋友,如果看不懂的话,请从第一章开始看起,文章目录请点击下面链接。

http://blog.csdn.net/lufy_legend/article/details/8888787

一眨眼,离上次更新已经两个月了,中间有几个朋友咨询地图跳转和任务系统具体怎么做,为了证明该系列文章会继续写下去,这一次先来实现一下地图跳转。

先看一下效果预览:

地图跳转,顾名思义,就是从一张地图跳转到另一张地图(这不是废话嘛),体现在游戏程序中,就是当人物走到了某一个坐标区域,或者在游戏中触发了某事件之后,游戏程序将当前地图和地图上的所有东西清除,简单说就是清空画面,然后再加载另一张地图并显示。

我们把游戏中事件的触发归类到任务系统中,本次来实现人物移动到某个坐标区域后的地图跳转,要实现这一过程,大约是下面的四个步骤:

1,地图跳转的坐标区域的设置

2,人物移动时,与地图上所设置的坐标区域的判定

3,画面清空

4,新地图加载

画面清空和地图加载两个功能在前面的章节已经实现完毕,所以这一次我们重点来看前面的两步。

首先,来看一下接下来要实现的脚本。

//RPG地图中各函数初始化开始 function.start; function mapR02(); //地图跳转 endfunction; function.end; //RPG地图中实时判定部分 loop.start; //添加地图坐标区域判定,参数(人物序号,起始坐标x,起始坐标y,终了坐标x,终了坐标y,触发函数名称) RPGCharacter.atCoordinate(1,43,27,45,29,mapR02); loop.end;其中的mapR02是创建函数脚本,不了解的朋友可以看一下第一章的内容。

loop.start;和loop.end;中间的脚本用来处理游戏中需要实时判定的内容,比如这次的地图跳转,每次人物移动都需要判断一次地图是否应该发生跳转。

atCoordinate这个脚本函数是设定地图跳转区域,几个参数都在上面做了注释,不多说了,下面看一下具体实现。

LRPGMapScript.loop=function(){ var script = LGlobal.script; var lineValue = LMath.trim(script.lineList.shift()); if(lineValue.length == 0){ LRPGMapScript.loop(); return; } trace("LRPGMapScript loop lineValue = " + lineValue); if(lineValue == "loop.end"){ LRPGMapScript.analysis(); return; } var params,i; var start = lineValue.indexOf("("); var end = lineValue.indexOf(")"); switch(lineValue.substr(0,start)){ case "RPGCharacter.atCoordinate": params = lineValue.substring(start+1,end).split(","); LRPGObject.RPGMap.addCoordinateCheck.apply(LRPGObject.RPGMap,params); LRPGMapScript.loop(); break; default: LRPGMapScript.loop(); } }; 直接贴了全部代码,是不是太敷衍了?哈哈,其实这些代码都是依葫芦画瓢,跟前面介绍过的一样,就是解析一下函数名和参数,重点是解析之后,调用了

LRPGObject.RPGMap.addCoordinateCheck.apply(LRPGObject.RPGMap,params);

LRPGObject.RPGMap是之前设定好的MapController的实例,

MapController.prototype.addCoordinateCheck=function(index,startX,startY,endX,endY,funName){ this.model.addCoordinateCheck(index,startX,startY,endX,endY,funName); };在这个控制器里面调用了模型的同名函数。

MapModel.prototype.addCoordinateCheck=function(index,startX,startY,endX,endY,funName){ var self = this; var child = { "index":index, "rect":new LRectangle( parseInt(startX), parseInt(startY), parseInt(endX)-parseInt(startX), parseInt(endY)-parseInt(startY) ), "fun":funName }; self.atRect.push(child); }; 把相应的参数,保存到控制器的atRect数组中,然后在人物移动的时候,和这个数组中的信息做判定就可以了。

因为人物移动是在Character类中实现的,所以修改Character类,在人物移动完一个坐标之后,与地图模型的atRect做一下判断,判断部分如下。

Character.prototype.checkCoordinate = function(controller,initFlag){ var self = this; var model=controller.model,i,obj,rect,rects = model.atRect,coor; for(i=0;i= rect.x && coor[0] = rect.y && coor[1]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3