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

打字机效果

对话在游戏中是很常见的,在开始本章的内容之前,先来扩展一下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;i2?lArr[2]:size;label.color = lArr.length>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<textList.length;i++){label = textList[i];label.wind_flag = false;label.text = label.wind_text;}script.analysis();
};

下面来看看这些脚本的使用,修改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

本章测试源码下载

https://github.com/lufylegend/lsharp/archive/1.7.zip

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

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

欢迎继续关注我的博客

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


《游戏脚本的设计与开发》-第一章总结 文字脚本的功能扩展和一个游戏测试相关推荐

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

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

  2. 《游戏脚本的设计与开发》-目录序

    本系列文章目录 章节 标题 连接 序 游戏脚本简介 http://blog.csdn.net/lufy_legend/article/details/8888787 第一章 基本功能 1.1 读取和解 ...

  3. 《游戏脚本的设计与开发》-(RPG部分)3.6 队员列表和人物属性

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

  4. 《游戏脚本的设计与开发》-(RPG部分)3.8 通过脚本来自由控制游戏(一)

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

  5. 《游戏脚本的设计与开发》-1.1 读取和解析一个脚本文件

    上一篇<游戏脚本的设计与开发>-序中我介绍了游戏脚本的基本概念和准备工作,本篇来说说具体如何解析一个脚本 所谓解析脚本,就是按照自己定义的语法,将每一个脚本命令还原成不同的代码逻辑进行执行 ...

  6. 《游戏脚本的设计与开发》-(RPG部分)3.5 游戏背包和任务系统

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

  7. 《游戏脚本的设计与开发》-(RPG部分)3.4 地图跳转

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

  8. 《游戏脚本的设计与开发》-(RPG部分)3.1 RPG地图到底怎么做?

    http://blog.csdn.net/lufy_legend/article/details/17417085 话说好久没有更新博客了,其实这段时间主要是工作忙,没时间.那又是什么刺激了我呢,为什 ...

  9. 《游戏脚本的设计与开发》-1.6 按钮,脚本的暂停和标签

    按钮 按钮在任何程序中都是必不可少的,本次先来看看如何脚本来实现按钮的各种功能.文章中要实现的几个脚本如下. /* 游戏脚本的设计与开发 第六章 */ //添加按钮 Button.add(layer0 ...

最新文章

  1. 《经济学人》万字长文:DeepMind和谷歌的AI拉锯战
  2. 【Android 逆向】Frida 框架 ( 安装 frida 12.7.5 | 安装 frida-tools 5.1.0 | PC 端 frida 与 安卓模拟器端 frida-server )
  3. GBK、UTF-8 快速转码工具 —— Notepad++
  4. 海报合成_新年元旦创意合成设计之跨年海报!这组海报我打99分!
  5. [验证码实现] Captcha 验证码类,一个很个性的验证码类 (转载)
  6. 电脑开机3秒就重启循环_手机怎么才能投屏到电脑上?3个方法,小屏1秒变大屏,涨知识了...
  7. Webstorm2018破解
  8. 免费的音频视频压缩工具和方法
  9. 用HTML标签设置字体颜色,html中li标签设置字体颜色
  10. 三种浏览器刷新操作,对缓存的影响
  11. 我的大一C++学习笔记
  12. Gephi最详细安装教程没有之一
  13. 转载:java 7新特性-TWR(Try-with-resources)
  14. 如何通过SQL Server语句查询三个月内的信息代码的教程方法
  15. STM32Cube STM32L053配置GPIO达到最低功耗详解含测量实际电流值
  16. grep -e 和 grep -E 的区别是什么?
  17. discuz mysql data_终于找到Discuz! Database Error终极解决办法了!
  18. 实用的日语翻译软件及翻译网址
  19. 网页标题添加ico图标
  20. 时间序列 工具库学习(6) Darts模块-使用DataTransformer和Pipelin进行数据预处理

热门文章

  1. java内存 海子_Java垃圾回收机制 - 海 子
  2. Proteus8仿真:51单片机LCD1602显示
  3. 打印英雄联盟登录界面
  4. 天冷了,我用Python爬取京东4950件羽绒服数据并可视化
  5. java URL Rest风格接口
  6. 通过拼数据库碎片的方式恢复虚拟机磁盘文件丢失问题
  7. Java 第11章 常用类库
  8. python 视频剪辑软件_用Python玩转视频剪辑,秀的飞起!
  9. python docx模块pip安装_pip安装python模块方法
  10. UVALive - 3510 Pixel Shuffle (群论)