制作一款HTML5 RPG游戏引擎教程(四).docx





《制作一款HTML5 RPG游戏引擎教程(四).docx》由会员分享,可在线阅读,更多相关《制作一款HTML5 RPG游戏引擎教程(四).docx(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1,实现后的代码为了向大家展示封装的必要性,所以我们先看实现后的代码:javascriptview plaincopy1. 2. 3. 4. 5. LTalk6. 7. 8. 9. init(30,legend,480,320,main);10. LRPGStage.setShortcuts(true);11. LGlobal.setDebug(true);12. varbackLayer,loadingLayer,talkLayer;13. vartalk;14. vartalkContent;15. vartalkNum=0;16. varloadData=17. name:yorhom_
2、face,path:./yorhom.jpg,18. name:lufy_face,path:./lufy.jpg19. ;20. varimglist=;21. functionmain()22. /加入进度条23. loadingLayer=newLoadingSample1();24. addChild(loadingLayer);25. /加载图片并显示进度26. LLoadManage.load(27. loadData,28. function(progress)29. loadingLayer.setProgress(progress);30. ,31. gameInit32.
3、);33. 34. functiongameInit(result)35. removeChild(loadingLayer);36. imglist=result;37. /初始化层38. backLayer=newLSprite();39. addChild(backLayer);40. talkLayer=newLSprite();41. backLayer.addChild(talkLayer);42. /加入操作按钮43. addEvent();44. /添加对话内容45. talkContent=46. name:Yorhom,msg:你好,lufy,face:imglistyor
4、hom_face,47. name:lufy,msg:你好,yorhom,face:imglistlufy_face,48. name:Yorhom,msg:lufylegend最新版本是哪个版本啊?,face:imglistyorhom_face,49. name:lufy,msg:你不知道自己看吗?,face:imglistlufy_face,50. name:Yorhom,msg:说得也是,face:imglistyorhom_face,51. ;52. /加入对话53. talkLayer.graphics.drawRect(5,black,20,15,400,130,true,bla
5、ck);54. talkLayer.alpha=0.8;55. talk=newLTalk(talkContent);56. talkLayer.addChild(talk);57. talkLayer.addEventListener(LMouseEvent.MOUSE_DOWN,say);58. /设置样式59. talk.setNameStyle(x:160,y:40,color:white,size:12);60. talk.setMsgStyle(x:160,y:70,color:white,size:10);61. talk.setFaceStyle(x:30,y:30);62.
6、talk.textWidth=260;63. 64. functionaddEvent()65. LEvent.addEventListener(LGlobal.window,LKeyboardEvent.KEY_UP,say);66. 67. functionsay()68. if(talkNumtalkContent.length)69. /输出对话70. talk.wind(talkNum,function()talkNum+;);71. 72. 73. 74. 75. 76. 77. 78. 这78行代码就可以实现进行5次对话的效果,先发两张截图,如下:由此可见,本次封装还是很有作用的
7、。但是如何实现呢?请看接下来的讲解。2,LTalk类LTalk是一个对话类,构造器如下:javascriptview plaincopy1. functionLTalk(content)2. vars=this;3. base(s,LSprite,);4. if(!content)5. s.content=;6. else7. s.content=content;8. 9. s.x=0;10. s.y=0;11. s.textWidth=LStage.width;12. s.talkIndex=0;13. s.faceX=0;14. s.faceY=0;15. s.nameX=0;16. s.
8、nameY=0;17. s.nameColor=black;18. s.nameFont=宋体;19. s.nameSize=15;20. s.msgX=0;21. s.msgY=0;22. s.msgColor=black;23. s.msgFont=宋体;24. s.msgSize=15;25. 其中,textWidth属性是为了设置文字区宽度的,设置后,如果文字过多而超出这个区域就会自动换行。talkIndex指对话编号。faceX,faceY指人物头像位置。nameX,nameY指人物名称的位置;nameColor,nameFont,nameSize分别用来设置名称颜色,字体,尺寸。m
9、sgX,msgY,msgColor,msgFont,msgSize同分别代表对话内容的x坐标,y坐标,颜色,字体,尺寸。设定好刚才的那些属性后,就可以自定义对话样式了。这个类构造时要传个参数,这个参数是对话内容。是一个数组套JSON的格式,如下:plainview plaincopy1. 2. name:名称,msg:内容,face:头像图片,3. name:名称,msg:内容,face:头像图片,4. name:名称,msg:内容,face:头像图片,5. name:名称,msg:内容,face:头像图片,6. name:名称,msg:内容,face:头像图片,7. ;每往这个列表里加一条,
10、就会多一段对话。3,wind方法接下来看看wind方法:javascriptview plaincopy1. LTalk.prototype.wind=function(num,completeFunc)2. vars=this;3. if(!num|num=null)num=0;4. if(!completeFunc)completeFunc=null;5. s.talkIndex=num;6. s.removeAllChild();7. if(s.talkIndexs.content.length)8. vartalkObject=s.contents.talkIndex;9. varfa
11、ceBitmapdata=newLBitmapData(talkObject.face);10. varfaceBitmap=newLBitmap(faceBitmapdata);11. faceBitmap.x=s.faceX;12. faceBitmap.y=s.faceY;13. s.addChild(faceBitmap);14. varname=newLTextField();15. name.x=s.nameX;16. name.y=s.nameY;17. name.size=s.nameSize;18. name.color=s.nameColor;19. name.font=s
12、.nameFont;20. name.text=talkObject.name;21. name.width=s.textWidth;22. name.setWordWrap(true,name.getHeight()+5);23. s.addChild(name);24. varmsg=newLTextField();25. msg.x=s.msgX;26. msg.y=s.msgY;27. msg.size=s.msgSize;28. msg.color=s.msgColor;29. msg.font=s.msgFont;30. msg.text=talkObject.msg;31. ms
13、g.width=s.textWidth;32. msg.setWordWrap(true,msg.getHeight()+7);33. msg.wind(completeFunc);34. s.addChild(msg);35. else36. trace(Error:Paramexceedsthesizeofthecontent!);37. 38. 这个方法有两个参数,第一个是播放序号,第二个参数是输出完成后调用的函数。首先我们判断一下参数num是不是没定义,如果是就自动设0,然后再判断第二个参数是否定义,如果没有,就设为null。这样做可以确保程序运行无误。接着,我们把控制播放序号的属性t
14、alkIndex设为num,然后清空一次,以便不和上次输出的重叠在一起。接着判断talkIndex有没有超出最大值,没有的话就执行输出命令。代码如下:javascriptview plaincopy1. vartalkObject=s.contents.talkIndex;2. varfaceBitmapdata=newLBitmapData(talkObject.face);3. varfaceBitmap=newLBitmap(faceBitmapdata);4. faceBitmap.x=s.faceX;5. faceBitmap.y=s.faceY;6. s.addChild(face
15、Bitmap);7. varname=newLTextField();8. name.x=s.nameX;9. name.y=s.nameY;10. name.size=s.nameSize;11. name.color=s.nameColor;12. name.font=s.nameFont;13. name.text=talkObject.name;14. name.width=s.textWidth;15. name.setWordWrap(true,name.getHeight()+5);16. s.addChild(name);17. varmsg=newLTextField();1
16、8. msg.x=s.msgX;19. msg.y=s.msgY;20. msg.size=s.msgSize;21. msg.color=s.msgColor;22. msg.font=s.msgFont;23. msg.text=talkObject.msg;24. msg.width=s.textWidth;25. msg.setWordWrap(true,msg.getHeight()+7);26. msg.wind(completeFunc);27. s.addChild(msg);熟悉lufylegend的朋友不难理解这些,就是将名称,内容,头像全部加到界面上。显示内容为构造器参数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 制作一款HTML5 RPG游戏引擎教程四 制作 一款 HTML5 RPG 游戏 引擎 教程

限制150内