`
252190908
  • 浏览: 228332 次
文章分类
社区版块
存档分类
最新评论

《游戏脚本的设计与开发》-第一部分总结 文字脚本的功能扩展和一个游戏测试

 
阅读更多

脚本系列文章写了好几篇了,大家可能都不清楚这些脚本有什么用,游戏中如何能应用到这些东西。当然,目前所介绍的内容还只是个简单的开头,说到做游戏还远远不够。不过,本次就使用前几章所介绍的内容,先来尝试一下如何使用脚本来制作一款简单的游戏(其实也算不上游戏了)。

打字机效果

对话在游戏中是很常见的,在开始本章的内容之前,先来扩展一下ScriptText类,加入一下三个标签,来控制打字机效果显示文字。

/*
游戏脚本的设计与开发 第一部分总结
*/
//打字机效果显示文字
Text.wind(layer02,txt01,打字机显示效果,0,0,300,20,null,#ff0000);
//打字机效果改变文字内容
Text.windChange(txt01,你点击了按钮,\n被点击按钮已经消失\n且文本已经被转换,30,#000000);
//停止打字机效果
Text.windOver(txt01);

下面是ScriptText类中打字机效果相关的代码,用来实现上述脚本的解析

/*
将临时数组windList中的文字对象逐个显示
**/
ScriptText.windrun = function (){
	if(ScriptText.windIndex >= ScriptText.windList.length){
		LGlobal.script.analysis();
		return;
	}
	//将临时数组windList中的文字对象逐个取出来
	var label = ScriptText.windList[ScriptText.windIndex++];
	label.visible = true;
	//利用LTextField对象的wind函数实现打字机效果的显示,显示结束后回调windrun函数本身
	label.wind(ScriptText.windrun);
};
ScriptText.wind = function (value,start,end){
	var script = LGlobal.script;
	//获取参数
	var lArr = value.substring(start+1,end).split(",");
	var layer,label,i;
	//显示层名称
	var layerStr = lArr[0];
	//文字对象名称
	var nameStr = lArr[1];
	//文字对象显示内容
	var textStr = lArr[2];
	//获取显示层
	layer = script.scriptArray.layerList[layerStr];
	//当文字显示的内容中包含有回车符的话,利用多个LTextField对象来完成换行显示。
	var textArr = textStr.split("\\n");
	var textList = new Array();
	for(i=0;i<textArr.length;i++){
		label = new LTextField();
		label.size = lArr[6];
		label.width = parseInt(lArr[5]);
		label.setWordWrap(true,label.size*1.2);
		label.color = lArr[8];
		label.text = textArr[i];
		label.x = parseInt(lArr[3]);
		label.y = parseInt(lArr[4]) + (label.size*1.2)* i ;
		label.name = nameStr;
		label.visible = false;
		layer.addChild(label);
		textList.push(label);
	}
	//保存文字对象组
	script.scriptArray.textList[nameStr] = textList;
	//将文字对象组存入临时数组,然后调用windrun函数,来逐个显示
	ScriptText.windList = textList;
	ScriptText.windIndex = 0;
	ScriptText.windrun();
};
ScriptText.windChange = function (value,start,end){
	var script = LGlobal.script,i;
	//获取参数
	var lArr = value.substring(start+1,end).split(",");
	//文字对象名称
	var nameStr = lArr[0];
	//文字对象显示内容
	var textStr = lArr[1];
	var color,size;
	//获取原文字对象的属性
	var textList = script.scriptArray.textList[nameStr];
	var x = textList[0].x;
	var y = textList[0].y;
	layer = textList[0].parent;
	//将原文字对象全部删除
	for(i=0;i<textList.length;i++){
		label = textList[i];
		color = label.color;
		size = label.size;
		label.parent.removeChild(label);
	}
	textList = new Array();
	//重新加入文字对象来显示改变后的内容,与wind函数中一样,当文字显示的内容中包含有回车符的话,利用多个LTextField对象来完成换行显示。
	textArr = textStr.split("\\n");
	for(i=0;i<textarr length="" i="" label="new" ltextfield="" size="lArr.length">2?lArr[2]:size;
		label.color = lArr.length&gt;3?lArr[3]:color;
		label.text = textArr[i];
		label.x = x;
		label.y = y + (label.getHeight()*1.2)* i ;
		label.name = nameStr;
		label.visible = false;
		layer.addChild(label);
		textList.push(label);
	}
	//保存文字对象组
	script.scriptArray.textList[nameStr] = textList;
	//将文字对象组存入临时数组,然后调用windrun函数,来逐个显示
	ScriptText.windList = textList;
	ScriptText.windIndex = 0;
	ScriptText.windrun();
};
ScriptText.windOver = function (value,start,end){
	//获取参数
	var lArr = value.substring(start+1,end).split(",");
	var nameStr = lArr[0];
	var script = LGlobal.script;
	//获取文字对象组
	var textList = script.scriptArray.textList[nameStr];
	if(textList == null){
		script.analysis();
		return;
	}
	//停止所有打字机效果
	for(i=0;i&lt;textList.length;i++){
		label = textList[i];
		label.wind_flag = false;
		label.text = label.wind_text;
	}
	script.analysis();
};</textarr>

下面来看看这些脚本的使用,修改Main.ls如下。

Layer.add(-,layer01,100,100);
Layer.add(-,layer02,20,50);
Load.img(ok_button_over,ok_button_over.png);
Load.img(ok_button_up,ok_button_up.png);
Button.add(layer01,button01,null,50,50,ok_button_up,ok_button_over,null);
function function_test01();
	Button.remove(button01);
	Text.windChange(txt01,你点击了按钮,\n被点击按钮已经消失\n且文本已经被替换,30,#000000);
endfunction;
Button.mousedown(button01,function_test01);
Text.wind(layer02,txt01,点击下面按钮,\n被点击按钮就会消失,且文本会被替换,0,0,300,20,null,#ff0000);

测试连接

http://lufylegend.com/demo/test/lsharp/07/index01.html

上面的测试中,先利用打字机效果显示文字,当点击按钮的时候文字内容会被替换掉。

应用举例

下面开始利用纯脚本,来做一个小应用,算是一个小小的体验,下面是所有脚本,每一行我都加上了详细的注释。

//添加显示层back
Layer.add(-,back,0,0);
//添加显示层chara
Layer.add(-,chara,0,0);
//添加显示层talk
Layer.add(-,talk,0,0);
//显示文字,读取中
Text.label(-,loading,图片读取中...,120,200,15,#000000);
//读取图片
Load.img(backdata,./images/back01.png);
Load.img(backdata01,./images/back02.png);
Load.img(selectbox,./images/selectbox.png);
Load.img(selectbtnup,./images/selectbtnup.png);
Load.img(selectbtnover,./images/selectbtnover.png);
Load.img(girldata,./images/girl01.png);
Load.img(boydata,./images/boy.png);
//删除文字,读取中
Text.remove(loading);
//显示背景
Img.add(back,backimg,backdata,0,0,700,500,0);
//背景由透明逐渐显示
Img.transition(backimg,{alpha:1},1,Strong.easeOut);
//在屏幕外显示吕布的人物图片
Img.add(chara,boyimg,boydata,-202,50,202,353,1);
//让吕布图片从屏幕外滑动到屏幕内
Img.transition(boyimg,{x:240},1,Strong.easeOut);
//添加对话框
Img.add(talk,selectbox,selectbox,100,270,405,125,1);
//显示对话人物名称
Text.label(talk,name01,[ 吕布 ],120,290,15,#ffffff);
//显示对话
Text.wind(talk,talk, 你好!欢迎来到「L#游戏世界」!我是吕布。吕布与貂蝉中的吕布,现在开始我来向大家做一个简单的L#脚本演示。(点击屏幕继续),120,310,360,13,null,#ffffff);
//暂停,等待点击屏幕
Wait.click();
//改变对话
Text.windChange(talk,首先,来试一下选择分支的使用。);
//暂停20毫秒
Wait.time(20);
//改变对话
Text.windChange(talk,告诉我你是男生还是女生?);
//在talk层上添加显示层select
Layer.add(talk,select,120,320);
//在select层上添加两个按钮,作为选项
Button.add(select,btn01,男生,0,10,selectbtnup,selectbtnover,selectbtnover,#ffffff);
Button.add(select,btn02,女生,0,40,selectbtnup,selectbtnover,selectbtnover,#ffffff);
function btn01click();
	//男生按钮被点击之后,移除select层
	Layer.remove(select);
	//将变量gender的值赋值为帅哥
	Var.set(gender,帅哥); 
	//对话,显示选择结果
	Text.windChange(talk,原来是@gender啊!);
endfunction;
function btn02click();
	//女生按钮被点击之后,移除select层
	Layer.remove(select);
	//将变量gender的值赋值为美女
	Var.set(gender,美女); 
	//对话,显示选择结果
	Text.windChange(talk,原来是@gender啊!);
endfunction;
//为按钮添加点击事件
Button.mousedown(btn01,btn01click);
Button.mousedown(btn02,btn02click);
//暂停
Wait.ctrl(0);
//暂停50毫秒
Wait.time(50);
//改变对话
Text.windChange(talk,你是30岁以上的@gender吗?);
//在talk层上添加显示层select
Layer.add(talk,select,120,320);
//在select层上添加两个按钮,作为选项
Button.add(select,btn01,30岁以上,0,10,selectbtnup,selectbtnover,selectbtnover,#ff0000);
Button.add(select,btn02,30岁以下,0,40,selectbtnup,selectbtnover,selectbtnover,#ff0000);
function btn01click();
	Layer.remove(select);
	Var.set(age,30岁以上); 
	Text.windChange(talk,原来是@age的@gender!);
endfunction;
function btn02click();
	Layer.remove(select);
	Var.set(age,30岁以下); 
	Text.windChange(talk,原来是@age的@gender!);
endfunction;
//为按钮添加点击事件
Button.mousedown(btn01,btn01click);
Button.mousedown(btn02,btn02click);
//暂停
Wait.ctrl(0);
//暂停50毫秒
Wait.time(50);
//改变对话
Text.windChange(talk,那么,接下来......);
//暂停30毫秒
Wait.time(30);
//改变对话人物名称
Text.labelChange(name01,[ ??? ],15,#ff0000);
//改变对话
Text.windChange(talk,奉先~~~!);
//暂停30毫秒
Wait.time(30);
//改变对话人物名称
Text.labelChange(name01,[ 吕布 ],15,#ffffff);
//改变对话
Text.windChange(talk,......咦,是谁呢?);
//在屏幕外显示神秘女郎的人物图片
Img.add(chara,girlimg,girldata,800,70,248,338,1);
//让神秘女郎图片从屏幕外滑动到屏幕内
Img.transition(girlimg,{x:450},1,Strong.easeOut);
//改变对话人物名称
Text.labelChange(name01,[ 神秘女郎 ],15,#ff0000);
//改变对话
Text.windChange(talk,你不用管我是谁,我带你去一个地方!);
Wait.time(50);
//改变对话人物名称
Text.labelChange(name01,[ 吕布 ],15,#ffffff);
//改变对话
Text.windChange(talk,我不认识你,为什么要跟你去?而且我现在正在介绍游戏...);
Wait.time(50);
//改变对话人物名称
Text.labelChange(name01,[ 神秘女郎 ],15,#ff0000);
//改变对话
Text.windChange(talk,我就是来帮你一起介绍的啊,快点过来!);
//神秘女郎移出屏幕
Img.transition(girlimg,{x:800},1,Strong.easeOut);
Img.moveTo(gril,700,150,10);
Wait.time(50);
//改变对话人物名称
Text.labelChange(name01,[ 吕布 ],15,#ffffff);
//改变对话
Text.windChange(talk,稍等,稍等...);
Wait.time(20);
//改变对话
Text.windChange(talk,...);
Wait.time(50);
//神秘女郎变透明
Img.transition(girlimg,{alpha:0},0,Strong.easeOut);
//神秘女郎移入屏幕
Img.transition(girlimg,{x:450},0,Strong.easeOut);
//背景变透明
Img.transition(backimg,{alpha:0},1,Strong.easeOut,1);
//吕布变透明
Img.transition(boyimg,{alpha:0},1,Strong.easeOut);
//背景替换
Img.changeData(backimg,backdata01);
//吕布显示
Img.transition(boyimg,{alpha:1},1,Strong.easeOut,1);
//神秘女郎显示
Img.transition(girlimg,{alpha:1},1,Strong.easeOut,1);
//背景显示
Img.transition(backimg,{alpha:1},1,Strong.easeOut);
Img.moveTo(gril,400,150,10);
//改变对话人物名称
Text.labelChange(name01,[ 神秘女郎 ],15,#ff0000);
//改变对话
Text.windChange(talk,奉先,你看这里是不是很漂亮?);
Wait.time(50);
//改变对话人物名称
Text.labelChange(name01,[ 吕布 ],15,#ffffff);
//改变对话
Text.windChange(talk,你拉我来这里干什么,被貂蝉看到了可就说不清了!);
Wait.time(50);
//改变对话人物名称
Text.labelChange(name01,[ 神秘女郎 ],15,#ff0000);
//改变对话
Text.windChange(talk,我这不是帮你一起介绍一下场景切换嘛!);
Wait.time(50);
//改变对话人物名称
Text.labelChange(name01,[ 吕布 ],15,#ffffff);
//改变对话
Text.windChange(talk,原来是这样啊。);
Wait.time(50);
//改变对话人物名称
Text.labelChange(name01,[ 神秘女郎 ],15,#ff0000);
//改变对话
Text.windChange(talk,好了,本次的介绍就到这里了!);
Wait.time(50);
//改变对话人物名称
Text.labelChange(name01,[ 吕布 ],15,#ffffff);
//改变对话
Text.windChange(talk,......);
Wait.time(50);
//改变对话
Text.windChange(talk,......好吧。);
Wait.time(50);
//改变对话人物名称
Text.labelChange(name01,[ 吕布 & 神秘女郎 ],15,#ffffff);
//改变对话
Text.windChange(talk,再见了!);
//游戏变透明
Layer.transition(-,{alpha:0},1,Strong.easeOut);
//清空画面
Layer.clear(-);
//添加文字
Text.label(-,byebye,多谢观看!,120,260,30,#ff0000);
//渐显
Layer.transition(-,{alpha:1},1,Strong.easeOut);

测试连接如下

http://lufylegend.com/demo/test/lsharp/07/index.html

这个是运行效果

本系列文章的第一部分就结束了,下一章开始来介绍如何利用脚本来制作一款战棋游戏,欢迎继续关注。


本章为止的lufylegend.lsharp.js源码如下

http://lufylegend.com/demo/test/lsharp/07/lufylegend.lsharp.js

《游戏脚本的设计与开发》系列文章目录

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



欢迎继续关注我的博客

转载请注明:转自lufy_legend的博客http://blog.csdn.net/lufy_legend

分享到:
评论

相关推荐

    Advanced Bash-Scripting Guide <>

    第一部分. 热身 1. 为什么使用shell 编程 2. 带着一个Sha-Bang 出发(Sha-Bang 指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量赋值 4.3. ...

    Android应用开发揭秘pdf高清版

    不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏引擎设计、Android应用优化、OpcnGL等...

    Cocos2d-x3.X游戏开发入门精解 [渥瑞达,冉伟,李连胜 编著] 2015年版

    本书内容由浅入深,从最简单的搭建开发环境开始直到最后完成一个高质量的游戏项目。全书共20 章:第1~3 章主要讲解开发环境的搭建及所需要的C++基础知识;第4~9 章讲解Cocos2d-x 的常见技术,包括基础类、动画、...

    《Android应用开发揭秘》源码

     14.3.1 游戏引擎结构和功能设计  14.3.2 游戏引擎设计注意事项  14.4 游戏引擎实现  14.4.1 Activity类实现  14.4.2 流程控制和线程  14.4.3 游戏对象与对象管理  14.4.4 图形引擎  14.4.5 物理引擎  14.4...

    《Android应用开发揭秘》附带光盘代码.

     第1章 Android开发简介  1.1 Android基本概念  1.1.1 Android简介  1.1.2 Android的系统构架  1.1.3 Android应用程序框架  1.2 OMS介绍  1.2.1 OPhone介绍  1.2.2 Widget介绍  1.3 小结  第2章 Android...

    Linux高级bash编程

    第一部分. 热身 1. 为什么使用shell编程 2. 带着一个Sha-Bang出发(Sha-Bang指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第一部分

    第1章 Linux开发基础.1 1.1 Linux系统概述1 1.1.1 Linux简介1 1.1.2 Linux系统的特点1 1.1.3 Linux系统的组成2 1.2 Linux系统的使用2 实验1.1 熟悉Linux基本命令与文件目录系统2 1.3 全屏幕编辑器与vi6 ...

    嵌入式Linux程序设计案例与实验教程-实例代码

    第1章 Linux开发基础.1 1.1 Linux系统概述1 1.1.1 Linux简介1 1.1.2 Linux系统的特点1 1.1.3 Linux系统的组成2 1.2 Linux系统的使用2 实验1.1 熟悉Linux基本命令与文件目录系统2 1.3 全屏幕编辑器与vi...

    vc++ 开发实例源码包

    请求的长度在第一个INT中指定. 2) 每个服务器通常会向多种客户提供服务, 例如, TS要同时向CP, NP提供服务, CP要向NP和其他CP提供服务, 同时还是其他CP, TS, SP的客户. 3) 每个服务器为客户服务时, 通常是长期的, 会...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第二部分

    第1章 Linux开发基础.1 1.1 Linux系统概述1 1.1.1 Linux简介1 1.1.2 Linux系统的特点1 1.1.3 Linux系统的组成2 1.2 Linux系统的使用2 实验1.1 熟悉Linux基本命令与文件目录系统2 1.3 全屏幕编辑器与vi6 ...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第三部分

    第1章 Linux开发基础.1 1.1 Linux系统概述1 1.1.1 Linux简介1 1.1.2 Linux系统的特点1 1.1.3 Linux系统的组成2 1.2 Linux系统的使用2 实验1.1 熟悉Linux基本命令与文件目录系统2 1.3 全屏幕编辑器与vi6 ...

    基于JavaEE的快速开发框架

    Hibernate是后来又补上的,最早的版本没有是因为第一个版本是为游戏服务器架构的,唯快不破的准则放弃了Hibernate,而后面增加回来是基于后台管理功能的需要。这一过程纠正了我一个开发框架中只能存在一个ORM的想法...

    JAVA上百实例源码以及开源项目

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    JAVA上百实例源码以及开源项目源代码

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    测试覆盖率

     凭着对软件测试行业的深刻理解,武友文意识到要解决国内软件应用滞后于硬件的问题,就必须提高国内软件的质量,而要提高软件质量,就必须加强软件开发过程中的测试力量,而独立的第三方测试机构正是一个市场空白点...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics