所有分类
  • 所有分类
  • 后端开发
用继承自 lsprite 的类实现简单 rpg 的 demo 教程

用继承自 lsprite 的类实现简单 rpg 的 demo 教程

这次用继承自lsprite的类来实现简单的rpg的demo下面说一说如何继承,继承的话,js没有办法像as那样继承,三个参数分别是child,base,base构造器参数数组这个方法可以实现js的完美继承只需要在构造器里调用base(thi

一、开篇感慨:重温编程的乐趣

开篇感慨:重温编程的乐趣

学习编程感觉超棒!那时第一次接触它,就感觉自己俨然是个魔法师,想怎么玩就怎么玩。这次我们要用LSPrite的类做个简单的RPG游戏,想想都兴奋。说实话,JavaScript的继承方式比ActionScript还复杂,有点头疼。但只要能做出好玩的游戏,这些都不叫事儿。

var backLayer;  
//地图  
var mapimg;  
//人物  
var playerimg;  
var loader  
var imageArray;  
var loadIndex = 0;  
var imgData = new Array({name:"back.jpg",img:null},{name:"1.png",img:null},{name:"2.png",img:null});  
var chara;  
var charaList;  
  
  
function main(){  
    loadImage();  
}  
function loadImage(){  
    if(loadIndex >= imgData.length){  
        gameInit();  
        return;  
    }  
    loader = new LLoader();  
    loader.addEventListener(LEvent.COMPLETE,loadComplete);  
    loader.load(imgData[loadIndex].name,"bitmapData");  
}  
function loadComplete(event){  
    imgData[loadIndex].img = loader.content;  
    loadIndex++;  
    loadImage();  
}  
function gameInit(event){  
    var bitmapdata;  
    bitmapdata = new LBitmapData(imgData[0].img);  
    mapimg = new LBitmap(bitmapdata);  
      
    document.getElementById("inittxt").innerHTML="";  
    backLayer = new LSprite();  
    addChild(backLayer);  
    backLayer.addChild(mapimg);  
      
    bitmapdata = new LBitmapData(imgData[1].img,0,0,70,92);  
    imageArray = LGlobal.divideCoordinate(bitmapdata.image.width,bitmapdata.image.height,8,8);  
    playerimg = new LBitmap(bitmapdata);  
    chara = new CharacterSprite(true,playerimg,imageArray,0,0);  
    backLayer.addChild(chara);  
  
  
    charaList = new Array();  
    for(var i=0;i<10;i++){  
        bitmapdata = new LBitmapData(imgData[2].img,0,0,80,91);  
        imageArray = LGlobal.divideCoordinate(bitmapdata.image.width,bitmapdata.image.height,8,8);  
        playerimg = new LBitmap(bitmapdata);  
        var npcx = parseInt(Math.random()*800/3)*3;  
        var npcy = parseInt(Math.random()*480/3)*3;  
        var npc = new CharacterSprite(false,playerimg,imageArray,npcx,npcy);  
        backLayer.addChild(npc);  
        charaList.push(npc);  
    }  
      
    backLayer.addEventListener(LEvent.ENTER_FRAME, onframe)  
    backLayer.addEventListener(LMouseEvent.MOUSE_DOWN, onmousedown);  
}  
  
  
function onframe(){  
    chara.onframe();  
      
    for(var i=0;i<charaList.length;i++){  
        charaList[i].onframe();  
    }  
}  
function onmousedown(event){  
    chara.toCoordinate.x = parseInt(event.selfX/3)*3;  
    chara.toCoordinate.y = parseInt(event.selfY/3)*3;  
}

二、代码对比:JS与AS的异同

代码对比:JS与AS的异同

聊到代码,你们可能好奇,这次的JS和AS代码究竟有啥相似之处?其实,只要明白了AS,就会觉得JS跟它差不多。JS的语法有点特别,但真要动工编写时,会发现两者的思维过程非常相像。想象成,就算用的词儿不同,想表达的意思还是一回事!

三、成果展示:一个简单的RPG游戏

成果展示:一个简单的RPG游戏

说了半天,大家可能好奇这游戏到底怎么样?简单说,就是个小RPG游戏。虽然功能不多,但该有的都有。如果电脑支持HTML5就能网上直接玩儿;不然的话,赶快下个浏览器!几分钟搞定下载,然后就能享受超炫的游戏体验!

四、继承详解:JS的继承方式

继承详解:JS的继承方式

function base(derive,baseSprite,baseArgs){  
    baseSprite.apply(derive,baseArgs);  
      
    for(prop in baseSprite.prototype){  
        var proto = derive.constructor.prototype;  
        if(!proto[prop]){  
            proto[prop] = baseSprite.prototype[prop];  
        }  
    }  
}

用继承自 lsprite 的类实现简单 rpg 的 demo 教程

说起来js的继承方法,跟as不太一样怎么弄?给大家科普下:在JS里,我们常常使用这样一个公式,有三个参数:child,base和base构造器参数数组。就靠这个策略,咱就能搞定继承了。虽然看起来有点麻烦,但一学就会,就像走路似的,路上可能曲折一点,但只要认准了路,总能到达目的地的。

五、实战演练:创建CharacterSprite类

实战演练:创建CharacterSprite类

好,开始说点实在的!首先,我们得把LSprite改成自己的东东,叫作CharacterSprite。这事挺简单,我们就在构造函数里写上base(this,LSprite,[])就行了。这样子的话,CharacterSprite就能继承LSprite的所有功能,比如说那个大家都喜欢用的addChild方法,就是从LSprite那里继承过来的哟。这就像是接班人一样,老一辈的知识和才智就这么慢慢地传下去了。

六、继承的魅力:代码的复用与扩展

继承的魅力:代码的复用与扩展

说起继承最牛逼的就是不用费劲地重写代码就能扩充功能!继承就像个万用包,啥时候都能用上那些写成好的代码。这样不仅省时省力,还方便别人读懂和维护。想象一下,有了这种神器,工作也就变得轻松得多!

七、总结与展望:编程之路,永无止境

总结与展望:编程之路,永无止境

好久不见!最近我又学会了新技能——新继承,而且还自己做了个RPG游戏!虽然后面有些坎坷,但总算完成了。编程,总是有新的知识要学,每次进步都能使我们更加强大。所以,我们得继续加油,向前闯荡!

各位小伙伴们,来聊聊你们程序员生活中有没有啥有趣的事情呀?赶快在评论区分享别忘了给小编点赞顺便转个发也是好的~

function CharacterSprite(ishero,bitmap,imageArray,x,y){  
    base(this,LSprite,[]);  
    var self = this;  
    self.x = x;  
    self.y = y;  
    self.toCoordinate = {x:x,y:y};  
    self.ishero = ishero;  
    self.animeIndex = 0;  
    self.dirindex = 0;  
    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};  
      
    self.bitmap = bitmap;  
    self.imageArray = imageArray;  
    self.addChild(bitmap);  
}  
CharacterSprite.prototype.onframe = function (){  
    var self = this;  
    self.animeIndex++;  
    if(self.animeIndex >= self.imageArray[0].length){  
        self.animeIndex = 0;  
    }  
    var markx = 0,marky = 0;  
    var l = 3;  
    if(self.x > self.toCoordinate.x){  
        self.x -= l;  
        markx = -1;  
    }else if(self.x  self.toCoordinate.y){  
        self.y -= l;  
        marky = -1;  
    }else if(self.y  0){  
            self.index -= 1;  
        }else{  
            self.index = parseInt(Math.random()*300);  
            self.toCoordinate.x = parseInt(Math.random()*800/3)*3;  
            self.toCoordinate.y = parseInt(Math.random()*480/3)*3;  
        }  
    }  
    self.bitmap.bitmapData.setCoordinate(self.imageArray[self.dirindex][self.animeIndex].x,self.imageArray[self.dirindex][self.animeIndex].y);  
      
}

原文链接:https://www.icz.com/technicalinformation/web/2024/06/18443.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?