所有分类
  • 所有分类
  • 后端开发
画风怪异!黄色老头子往左狂奔,OOP技巧大揭秘

画风怪异!黄色老头子往左狂奔,OOP技巧大揭秘

鄙人虽然不是专职的游戏开发者,但是自己也尝试着开发过各种各样类型的游戏,不过横版类游戏还没有尝试过,本次就使用lufylegend引擎来挑战一下横版act类游戏的开发,(一):开天地黄忠初登场下面,开始就马上开始游戏初始化的工作。

横版ACT游戏开发的初衷

画风怪异!黄色老头子往左狂奔,OOP技巧大揭秘

我不是专业玩游戏的,就是挺爱玩儿。这回想试试这个画风怪特别的斜着跑步的游戏。要用个叫 lufylegend 的引擎,主角,就挑黄色老头子。他只能往左跑。所以就在想怎么弄个LAnimation对象把画面扭到左边,让大家看到那边的动态。至于在游戏里怎么添加OOP (面向对象程序设计),我打算这样搞,方便更好地操控各种士兵和将军们咯。

画风怪异!黄色老头子往左狂奔,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];
	}
}

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

评论0

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