HTML5技术

仿AS语法来写HTML5—第4章,继承与简单的rpg

字号+ 作者:lufy 来源: 2014-11-16 21:26 我要评论( )

这次用继承自LSprite的类来实现简单的rpg的demo 先看一下最后的代码与as的相似度 JavaScript Code 复制内容到剪贴板 var backLayer; //地图 var mapimg; //人物 var playerimg; var loader var imageArray; var loa

 这次用继承自LSprite的类来实现简单的rpg的demo
先看一下最后的代码与as的相似度

JavaScript Code复制内容到剪贴板
  1. var backLayer;  
  2. //地图  
  3. var mapimg;  
  4. //人物  
  5. var playerimg;  
  6. var loader  
  7. var imageArray;  
  8. var loadIndex = 0;  
  9. var imgData = new Array({name:"back.jpg",img:null},{name:"1.png",img:null},{name:"2.png",img:null});  
  10. var chara;  
  11. var charaList;  
  12.   
  13. function main(){  
  14.         loadImage();  
  15. }  
  16. function loadImage(){  
  17.         if(loadIndex >= imgData.length){  
  18.                 gameInit();  
  19.                 return;  
  20.         }  
  21.         loader = new LLoader();  
  22.         loader.addEventListener(LEvent.COMPLETE,loadComplete);  
  23.         loader.load(imgData[loadIndex].name,"bitmapData");  
  24. }  
  25. function loadComplete(event){  
  26.         imgData[loadIndex].img = loader.content;  
  27.         loadIndex++;  
  28.         loadImage();  
  29. }  
  30. function gameInit(event){  
  31.         var bitmapdata;  
  32.         bitmapdata = new LBitmapData(imgData[0].img);  
  33.         mapimg = new LBitmap(bitmapdata);  
  34.           
  35.         document.getElementById("inittxt").innerHTML="";  
  36.         backLayer = new LSprite();  
  37.         addChild(backLayer);  
  38.         backLayer.addChild(mapimg);  
  39.           
  40.         bitmapdata = new LBitmapData(imgData[1].img,0,0,70,92);  
  41.         imageArray = LGlobal.divideCoordinate(bitmapdata.image.width,bitmapdata.image.height,8,8);  
  42.         playerimg = new LBitmap(bitmapdata);  
  43.         chara = new CharacterSprite(true,playerimg,imageArray,0,0);  
  44.         backLayer.addChild(chara);  
  45.   
  46.         charaList = new Array();  
  47.         for(var i=0;i<10;i++){  
  48.                 bitmapdata = new LBitmapData(imgData[2].img,0,0,80,91);  
  49.                 imageArray = LGlobal.divideCoordinate(bitmapdata.image.width,bitmapdata.image.height,8,8);  
  50.                 playerimg = new LBitmap(bitmapdata);  
  51.                 var npcx = parseInt(Math.random()*800/3)*3;  
  52.                 var npcy = parseInt(Math.random()*480/3)*3;  
  53.                 var npc = new CharacterSprite(false,playerimg,imageArray,npcx,npcy);  
  54.                 backLayer.addChild(npc);  
  55.                 charaList.push(npc);  
  56.         }  
  57.           
  58.         backLayer.addEventListener(LEvent.ENTER_FRAME, onframe)  
  59.         backLayer.addEventListener(LMouseEvent.MOUSE_DOWN, onmousedown);  
  60. }  
  61.   
  62. function onframe(){  
  63.         chara.onframe();  
  64.           
  65.         for(var i=0;i<charaList.length;i++){  
  66.                 charaList[i].onframe();  
  67.         }  
  68. }  
  69. function onmousedown(event){  
  70.         chara.toCoordinate.x = parseInt(event.selfX/3)*3;  
  71.         chara.toCoordinate.y = parseInt(event.selfY/3)*3;  
  72. }  


应该还算可以吧?
看一下成果吧
http://fsanguo.comoj.com/html5/jstoas03/index.html

下面说一说如何继承,继承的话,js没有办法像as那样继承,
js的继承看下面

JavaScript Code复制内容到剪贴板
  1. function base(derive,baseSprite,baseArgs){  
  2.         baseSprite.apply(derive,baseArgs);  
  3.           
  4.         for(prop in baseSprite.prototype){  
  5.                 var proto = derive.constructor.prototype;  
  6.                 if(!proto[prop]){  
  7.                         proto[prop] = baseSprite.prototype[prop];  
  8.                 }  
  9.         }  
  10. }  

三个参数分别是child,base,base构造器参数数组

这个方法可以实现js的完美继承
现在来建立一个继承自LSprite的类CharacterSprite
只需要在构造器里调用base(this,LSprite,[])就可以实现继承
而且CharacterSprite因为继承了LSprite的方法,所以它有addChild等方法
CharacterSprite类代码如下

JavaScript Code复制内容到剪贴板
  1. function CharacterSprite(ishero,bitmap,imageArray,x,y){  
  2.         base(this,LSprite,[]);  
  3.         var self = this;  
  4.         self.x = x;  
  5.         self.y = y;  
  6.         self.toCoordinate = {x:x,y:y};  
  7.         self.ishero = ishero;  
  8.         self.animeIndex = 0;  
  9.         self.dirindex = 0;  
  10.         self.dirmark = {"0,1":0,"-1,0":1,"1,0":2,"0,-1":3,"-1,1":4,"1,1":5,"-1,-1":6,"1,-1":7};  
  11.           
  12.         self.bitmap = bitmap;  
  13.         self.imageArray = imageArray;  
  14.         self.addChild(bitmap);  
  15. }  
  16.   
  17. CharacterSprite.prototype.onframe = function (){  
  18.         var self = this;  
  19.         self.animeIndex++;  
  20.         if(self.animeIndex >= self.imageArray[0].length){  
  21.                 self.animeIndex = 0;  
  22.         }  
  23.         var markx = 0,marky = 0;  
  24.         var l = 3;  
  25.         if(self.x > self.toCoordinate.x){  
  26.                 self.x -= l;  
  27.                 markx = -1;  
  28.         }else if(self.x < self.toCoordinate.x){  
  29.                 self.x += l;  
  30.                 markx = 1;  
  31.         }  
  32.         if(self.y > self.toCoordinate.y){  
  33.                 self.y -= l;  
  34.                 marky = -1;  
  35.         }else if(self.y < self.toCoordinate.y){  
  36.                 self.y += l;  
  37.                 marky = 1;  
  38.         }  
  39.         if(markx !=0 || marky != 0){  
  40.                 var mark = markx+","+marky;  
  41.                 self.dirindex = self.dirmark[mark];  
  42.         }else if(!self.ishero){  
  43.                 if(self.index > 0){  
  44.                         self.index -= 1;  
  45.                 }else{  
  46.                         self.index = parseInt(Math.random()*300);  
  47.                         self.toCoordinate.x = parseInt(Math.random()*800/3)*3;  
  48.                         self.toCoordinate.y = parseInt(Math.random()*480/3)*3;  
  49.                 }  
  50.         }  
  51.         self.bitmap.bitmapData.setCoordinate(self.imageArray[self.dirindex][self.animeIndex].x,self.imageArray[self.dirindex][self.animeIndex].y);  
  52.           
  53. }  


然后,准备好图片,按照最开始的代码,就可以完成rpg人物的添加移动等内容了

下一篇,也不知该研究什么了,先试着做个小游戏,然后看缺什么吧

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • HTML5开发的翻页效果

    HTML5开发的翻页效果

    2014-11-16 21:26

  • 仿AS语法来写HTML5-终篇LegendForHtml5Programming

    仿AS语法来写HTML5-终篇LegendForHtml5Programming

    2014-11-16 21:26

  • 仿AS语法来写HTML5—第9章,URLLoader读取文件

    仿AS语法来写HTML5—第9章,URLLoader读取文件

    2014-11-16 21:26

  • 仿AS语法来写HTML5—第8章,图片处理+粒子

    仿AS语法来写HTML5—第8章,图片处理+粒子

    2014-11-16 21:26

网友点评
A