《游戏脚本的设计与开发》-第一部分总结 文字脚本的功能扩展和一个游戏测试...
腳本系列文章寫了好幾篇了,大家可能都不清楚這些腳本有什么用,游戲中如何能應用到這些東西。當然,目前所介紹的內容還只是個簡單的開頭,說到做游戲還遠遠不夠。不過,本次就使用前幾章所介紹的內容,先來嘗試一下如何使用腳本來制作一款簡單的游戲(其實也算不上游戲了)。
打字機效果
對話在游戲中是很常見的,在開始本章的內容之前,先來擴展一下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
《游戲腳本的設計與開發》系列文章目錄
http://blog.csdn.net/lufy_legend/article/details/8888787
?
?
歡迎繼續關注我的博客?
轉載請注明:轉自lufy_legend的博客http://blog.csdn.net/lufy_legend?
轉載于:https://www.cnblogs.com/snake-hand/p/3153530.html
總結
以上是生活随笔為你收集整理的《游戏脚本的设计与开发》-第一部分总结 文字脚本的功能扩展和一个游戏测试...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: grep的几个参数
- 下一篇: cocos2dx andoroid切换后