横版ACT游戏开发的初衷
我不是专业玩游戏的,就是挺爱玩儿。这回想试试这个画风怪特别的斜着跑步的游戏。要用个叫 lufylegend 的引擎,主角,就挑黄色老头子。他只能往左跑。所以就在想怎么弄个LAnimation对象把画面扭到左边,让大家看到那边的动态。至于在游戏里怎么添加OOP (面向对象程序设计),我打算这样搞,方便更好地操控各种士兵和将军们咯。
LAnimation类的介绍
让我给你介绍个小魔法——LAnimation,它能帮咱们轻轻松松播小动画!就像翻书页一样,只要顺序或倒序的展示一堆图片就能做出动感的效果。创建时,只需告诉它图层(就是L Sprite)、数据(就是LBitmapData)以及列表(其实就是2维数组~)。从这看来,列表里存的好像就是图片的位置呀。想让动画动起来吗?那还不简单,直接在onframe函数上面敲打即可!
function Character(dataList,coordinateList,locationList,speed){ base(this,LSprite,[]); };
Character类的构造与功能
你了解吗?所有游戏里的角色都是从一个叫做“Character”的基类衍生出来的,包含比如dataList、coordinateList、locationList和speed这样的关键信息。想让他们活灵活现的话,必须在原来基础上添加一个”onframe”功能才行!接着咱来说说Player这个类别,就是咱们平时说的“孩子们”,因为是由Character派生而来。他们可是在战斗中帮助我们解决各种各样问题的好帮手。
初始化游戏及角色设置
function Character(dataList,coordinateList,locationList,speed){ base(this,LSprite,[]); var self = this; //初始化 //动作 self.action = ACTION.STAND; //方向 self.direction = DIRECTION.RIGHT; //保存参数 self.coordinateList = coordinateList; self.locationList = locationList; self.dataList = dataList; self.speed = speed==null?1:speed; //保存初始化动作的图片 self.data = dataList[ACTION.STAND]; self.speedIndex = 0; //利用LAnimation对象来显示连贯的动作 self.anime = new LAnimation(self,self.data,self.coordinateList[0]); self.anime.setAction(0); self.anime.x = -self.data.width*0.5; self.anime.y = -self.data.height; };
开始玩儿之前,先上个底色或者随便摆几个形状就行。然后,选个AddHero功能和onframe程序,这样你就能随心所欲地操控你的主人公。当然,调整下人物设定里的数据就万事大吉
//动作 var ACTION = {STAND:0,MOVE:1,RUN:2,JUMP:3,ATTACK:4}; //方向 var DIRECTION = {RIGHT:"right",LEFT:"left"};
控制角色动作
玩游戏时,可以用键盘轻松掌控角色移动!比如说,wsad四个键时上下左右,j键是打人,k键就是跳起来了。实现这个得在角色(Player)里新增一个方法叫setAction,专门处理这些动作。
黄老将军的表现与困境
[ [{x:0,y:0},{x:0,y:0},{x:0,y:0}], [{x:0,y:0},{x:0,y:0},{x:0,y:0}], [{x:0,y:0},{x:0,y:0},{x:0,y:0}] ]
LAnimation.setAction(rowIndex,colIndex,mode,isMirror) 参数: rowIndex:播放动画的行号 colIndex:播放动画的列号 mode:(1,0,-1)分别代表(正序播放,静止,倒序播放) isMirror:Boolean型,当设定为true的时候,图片显示为水平翻转后的镜像
老将军不动在游戏里,那是因为没写让他能动的代码。所以只好看着,不过可别欺负人家!咱们得抓紧时间把那些代码弄明白才行。
黄老将军在战场上的表现
Character.prototype.onframe = function (){ var self = this; //人物动作速度控制 if(self.speedIndex++ < self.speed)return; self.speedIndex = 0; //人物动画播放 self.anime.onframe(); };
未来我们能更好地提升黄老将军在游戏中的表现,比如说调整他的走位,还有战斗技巧之类的。把各种设定都好好调整下,让他在虚拟世界里更酷炫有型!
下一步计划与展望
做些改进:调整下黄老将跟其他人的动态,再加点画面、音乐之类的元素进去。别忘了加点游戏环节、剧情什么的,这样玩着才有劲头!
function Player(datalist,coordinateList,locationList,speed){ base(this,Character,[datalist,coordinateList,locationList,speed]); };
var CharacterList = { huangzhong:function(){ //图片数据 var dataList = new Array(); dataList.push(new LBitmapData(imglist["player_stand"],0,0,106,77)); dataList.push(new LBitmapData(imglist["player_move"],0,0,115,85)); dataList.push(new LBitmapData(imglist["player_run"],0,0,125,87)); dataList.push(new LBitmapData(imglist["player_jump"],0,0,131,212)); dataList.push(new LBitmapData(imglist["player_attack"],0,0,242,143)); //图片分割数据 var coordinateList = new Array(); coordinateList.push(LGlobal.pideCoordinate(1272,77,1,12)); coordinateList.push(LGlobal.pideCoordinate(920,85,1,8)); coordinateList.push(LGlobal.pideCoordinate(750,87,1,6)); coordinateList.push(LGlobal.pideCoordinate(786,212,1,6)); var attackList = LGlobal.pideCoordinate(484,143,1,2); coordinateList.push([[attackList[0][0],attackList[0][1],attackList[0][1],attackList[0][1]]]); //图片位置数据 var locationList = new Array(); locationList.push({x:0,y:0}); locationList.push({x:0,y:0}); locationList.push({x:0,y:0}); locationList.push({x:0,y:0}); locationList.push({x:20,y:20}); return [dataList,coordinateList,locationList]; } }
。
评论0