网站地图    收藏   

主页 > 前端 > h5游戏 >

h5游戏,h5游戏引擎,游戏开发教程

来源:未知    时间:2016-11-10 11:22 作者:xxadmin 阅读:

[导读] 随着对canvas的深入了解,发现canvas真是个好东西,也发现android真烂,哎! 最近在用canvas做小游戏,简单的跑酷类,打地鼠类的小游戏做了一遍,今天先写一个打地鼠的制作心得。 PS:以...

随着对canvas的深入了解,发现canvas真是个好东西,也发现android真烂,哎!


最近在用canvas做小游戏,简单的跑酷类,打地鼠类的小游戏做了一遍,今天先写一个打地鼠的制作心得。


PS:以前用JS做过打地鼠的游戏,现在看看真心烂。


首先我使用的是lufylegend.js 1.9.1的版本(非常好用的引擎,强烈推荐)。


在制作过程中先来分析打地鼠的游戏大概需要那几个模块:


1.老鼠这个对象。

2.游戏背景。

3.开始及结束。


首先来初始化引擎,lufylegend.js引擎初始化通过LInit(time,"id",x,y,main)实现;


引擎提供loading效果,当图片及js加载完毕后,删除loading效果,进入开始界面。


function main(){
if(LGlobal.canTouch){
LGlobal.stageScale = LStageScaleMode.SHOW_ALL;
LSystem.screen(LStage.FULL_SCREEN);
}
loadingLayer = new LoadingSample4();
addChild(loadingLayer);
LLoadManage.load(loadData, function(progress) {
loadingLayer.setProgress(progress);
}, imgLoadComplete);
};
function imgLoadComplete(result) {
datalist = result;
removeChild(loadingLayer);
loadingLayer = null;
var background = new Background();


开始界面先执行background函数来实现背景的创建,在background里来执行time、character函数;


function Background(){
base(this,LSprite,[]);
this.init();
};
Background.prototype.init = function(){
var self = this;
backLayer = new LSprite;
stageLayer = new LSprite;
addChild(backLayer);
self.bitmap = new LBitmap(new LBitmapData(datalist["background"],0,0,640,960));
backLayer.addChild(this.bitmap);
//console.log(this.bitmap.childList);
self.back = new LBitmap(new LBitmapData(datalist["backCove"],0,0,640,960));
self.back.x = 0;
self.back.y = 0;
backLayer.addChild(self.back);
timeLayer = new LSprite();
backLayer.addChild(timeLayer);
time = new Time();
timeLayer.addChild(time);
charaLayer = new LSprite();
backLayer.addChild(charaLayer);
};

time函数是通过时间来控制进度条的缩放,通过scroleX来改变时间进度条的长短。


character函数创建对象,通过对象的操控可以方便的对每个对象进行事件监听。


function Character(){
base(this,LSprite,[]);
this.init();
};
Character.prototype.init = function(){
var self = this;
self.x = adressData[adressNum][0];
self.y = adressData[adressNum][1];
self.adressNum = adressNum;
var charaNum = parseInt(Math.random()*4);
self.index = charaNum;
self.bitmap = new LBitmap(new LBitmapData(datalist[charaData[charaNum]]));
self.addChild(self.bitmap);
self.speed = 5;
self.canClick = false;
self.clickSpeed = 2;
};


当然要注意的是地鼠出现的位置不能重复,我通过数组的方法,每次随机出现的位置与数组内做比较,如果重复则重新随机数,不重复添加到数组中,并对对象进行赋值。当打到地鼠的时候删除数组中的这个位置。


Character.prototype.hide = function(obj){
var self = obj;
self.bitmap = new LBitmap(new LBitmapData(datalist[charaData[self.index][0]+"J"]));
charaLayer.addChild(self);
self.canClick = true;
self.addChild(self.bitmap);
self.x = adressData[self.adressNum][0];
self.y = adressData[self.adressNum][1];
for(var key in charaLayer.childList){
charaLayer.childList[key].clickSpeed -= 1;
if(self.canClick == true && charaLayer.childList[key].speed <= 0){
//移除该成员
var that = charaLayer.childList[key];
point += 100;
arr.remove(that.adressNum);
charaLayer.removeChild(charaLayer.childList[key]);
}
}
};
Character.prototype.run = function(){
var self = this;
for(var key in charaLayer.childList){
charaLayer.childList[key].speed -= 2;
if(self.canClick == false && charaLayer.childList[key].speed <= 0){
//移除该成员
arr.remove(charaLayer.childList[key].adressNum);
charaLayer.removeChild(charaLayer.childList[key]);
}
}
}

当然这是对charaLayer这个层上的对象进行操作,canvas游戏特别要注意层的这个概念。而且面向对象的思想也很重要。


在地鼠这个对象上要添加相应属性,方便后续操作的判断。首先判断这个地鼠是否被打中,我通过self.canClick属性来判断,若为false则没打中,改变速度,2秒后消失,如果打中值为true,更换图片,2秒后消失。


分数的加减在点击事件中,很简单。


gameover时,删除backLayer上所有层,增加一个层,显示游戏结束。


游戏不难,只要思路清晰,便很快能完成,理解层的概念,面向对象的思想,就OK了;


最新评论

添加评论

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论