第四篇,继承与简单的rpg

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

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;
}

应该还算可以吧?
看一下成果吧,看不到效果的请下载支持html5的浏览器
http://fsanguo.comoj.com/html5/jstoas03/index.html

下面说一说如何继承,继承的话,js没有办法像as那样继承,
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];
}
}
}

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

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.x){
self.x += l;
markx = 1;
}
if(self.y > self.toCoordinate.y){
self.y -= l;
marky = -1;
}else if(self.y < self.toCoordinate.y){
self.y += l;
marky = 1;
}
if(markx !=0 || marky != 0){
var mark = markx+","+marky;
self.dirindex = self.dirmark[mark];
}else if(!self.ishero){
if(self.index > 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); }

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

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

用仿ActionScript的语法来编写html5——第四篇,继承与简单的rpg的更多相关文章

  1. 用仿ActionScript的语法来编写html5——第五篇,Graphics绘图

    用仿ActionScript的语法来编写html5——第五篇,Graphics绘图 canvas本身就是一个Graphics,可以直接进行绘图在actionscript里面,每个Sprite都有一个G ...

  2. 用仿ActionScript的语法来编写html5——第八篇,图片处理+粒子效果

    用仿ActionScript的语法来编写html5系列开发到现在,应该可以做出一些东西了,下面先来研究下图片的各种效果预览各种效果看下图效果和代码看这里,看不到效果的请下载支持html5的浏览器 ht ...

  3. 用仿ActionScript的语法来编写html5——第六篇,TextField与输入框

    一,对比1,html5中首先看看在html5的canvas中的文字显示 var canvas = document.getElementById("myCanvas"); var ...

  4. 用仿ActionScript的语法来编写html5——第三篇,鼠标事件与游戏人物移动

    第三篇,鼠标事件与游戏人物移动 一,假设假设,所有可添加鼠标事件的对象,都有一个mouseEvent方法,添加的鼠标事件同过这个mouseEvent来调用.这样的话,添加鼠标事件,其实只需要给canv ...

  5. 用仿ActionScript的语法来编写html5——第七篇,自定义按钮

    第七篇,自定义按钮这次弄个简单点的,自定义按钮.其实,有了前面所定义的LSprite,LBitmap等类,定义按钮就很方便了.下面是添加按钮的代码, function gameInit(event){ ...

  6. 用仿ActionScript的语法来编写html5——终篇,LegendForHtml5Programming1.0开源库件

    一,LegendForHtml5Programming1.0库件是什么?它是一个javascript库,它模仿了ActionScript的语法,用于html5的开发,目前实现的功能相对较少,还不能称之 ...

  7. 用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件

    第九篇,仿URLLoader读取文件 先看看最后的代码 function readFile(){ urlloader = new LURLLoader(); urlloader.addEventLis ...

  8. 用仿ActionScript的语法来编写html5——第二篇,利用Sprite来实现动画

    上一篇,我已经模仿as,加入了LBitmap和LBitmapData类,并且用它们实现了静态图片的显示.这次用Sprite来动态显示图片.依然遵循上一篇对显示对象的处理的思路,添加LSprite类,并 ...

  9. 用仿ActionScript的语法来编写html5——第一篇,显示一张图片

    第一篇,显示一张图片 一,代码对比 as代码: public var loader:Loader; public function loadimg():void{ loader = new Loade ...

随机推荐

  1. CodeForces 586B Laurenty and Shop

    F - Laurenty and Shop Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I ...

  2. (译)Getting Started——1.3.4 Writing a Custom Class(编写自定义的类)

     在开发IOS应用中,当你编写自定义的类时,你会发现很多的特殊场合.当你需要把自定义的行为和数据包装在一起时,自定义的类非常有用.在自定义的类中,你可以定义自己的存储.处理和显示数据的方法. 例如,I ...

  3. FastDFS安装详解

    1.安装环境 os:centos6.5 Fastdfs版本:FastDFS_v5.08.tar.gz 下载地址:https://sourceforge.net/projects/fastdfs/fil ...

  4. [Android] Ubuntu下Eclipse || Android Studio识别不了手机的官方解决方案

    最近在转移开发平台,Android Studio一直都识别不了手机,但Eclipse却可以.经过一番调查后,发现是自己一点所以然导致的.接下来直接奉上解决教程 解决教程 在命令行终端输入lsusb命令 ...

  5. vSphere Web Client使用指南之安装配置

    vSphere Web Client使用指南之安装配置 vSphere Web Client是为忙碌的管理员提供的一款通用的.基于浏览器的VMware管理工具,能够监控并管理VMware基础设施.在摆 ...

  6. 第一百五十四节,封装库--JavaScript,表单验证--提交验证

    封装库--JavaScript,表单验证--提交验证 将表单的所有必填项,做一个判断函数,填写正确时返回布尔值 最后在提交时,判断每一项是否正确,全部正确才可以 提交 html <div id= ...

  7. cinder服务端的keystone认证机制

    keystone在openstack中的地位 Keystone作为OpenStack中的身份管理与授权模块,主要实现系统用户的身份认证.基于角色的授权管理.其他OpenStack服务的地址发现和安全策 ...

  8. sublime 空格 tab

    sublime强大的编辑能力非常值得推荐.在编辑python语言时,因为python用段落格式取代了常见语言中的括号,所以在写python时.会将空格和tab混淆,如此产生的错误非常是恼人. 如17, ...

  9. 深入学习QWidget-1

    1.QWidget对事件的抓取和放手.主要有例如以下几个接口 grabGesture 抓取输入手势 ungrabGesture 取消抓取手势 grabKeyboard 抓取键盘输入 grabMouse ...

  10. (转)Unity笔记之编辑器(BeginFadeGroup、BeginHorizontal、BeginScrollView) ... ...

    1. BeginFadeGroup(float value) 这是EditorGUILayout中的一个函数,用来隐藏/显示在它包含的组中的内容.value则是显示内容的量,范围是0-1 . 比较下未 ...