1.编辑UI界面,给每个树洞添加地鼠资源
- 导入地鼠资源和遮罩图资源
- 把var:normal 改为 name:normal,var:hit 改为:name:hit
- 快速复制每一个box
- 生成的box命名规则是item0----item8,调整地鼠位置,替换每一个遮罩的皮肤(拖动ui皮肤到skin)
- 导出界面,回到代码模式
2.随机从某个树洞中出现地鼠(修改Game.js)
var Game = (function(_super){
function Game(){
Game.super(this);
this.moles = new Array;
this.moleNum = 9;
for(var i=0;i<this.moleNum,++i){
//获取box对象
this.box = this.getChilByName("item"+i);
//实例化每一个地鼠
this.mole = new Mole(this.box.getChildByName("normal"),this.box.getChildByName("hit"),21);
//把每一个地鼠添加到地鼠数组中
this.moles.push(this.mole);
}
//每两秒中随机播放地鼠
Laya.timer.loop(2000,this,this.show);
}
//继承父类
Laya.class(Game,"Game",_super);
//注册类的原型
_proto = Game.prototype;
//实现每一个方法
_proto.show = function(){
//随机出现地鼠
this.index = Math.floor(Math.random()*this.moleNum);
//显示地鼠
this.moles[this.index].show();
}
//返回当前类
return Game;
})(ui.GameUI)
3.随机不同类型的地鼠(修改Mole.js)
/**
知识点:代码提示:刷新编辑器
*/
var Mole = (function(){
function Mole(normalState,hitState,downY){
//正常状态地鼠
this.normalState = normalState;
//受击状态地鼠
this.hitState = hitState;
//最低点的y坐标 (到编辑界面中查找)
this.downY = downY;
//最高点的y坐标 当前状态的y坐标
this.upY = this.normalState.y;
//重至
this.reset();
//给常态图添加点击事件 第一个是事件 第二个是执行域 第三个执行的方法
this.normalState.on(Laya.Event.CLICK,this,this.hit)
};
var _proto = Mole.prorotype;
//重值
_proto.reset = function(){
//隐藏
this.normalState.visible = false;
this.hitState.visible = false;
//激活状态
this.isActive = false;
//显示状态
this.isShow = false;
//受击状态
this.isHit = false;
}
//显示
_proto.show = function(){
//如果是激活了不做任何事情
if(this.isActive)return ;
this.isActive = true;
this.isShow = true;
//添加地鼠类型 1:兔子 2:地鼠
this.type = Math.random()<0.6?2:1;
//根据不同的类型显示不同的皮肤
this.normalState.skin = "ui/mouse_normal_"+this.type+".png";
this.hitState.skin = "ui/mouse_hit_"+this.type+".png";
//显示地鼠
this.normalState.visible = true;
//让地鼠回到最低坐标
this.normalState.y = this.downY;
//让地鼠缓冲出来
Laya.Tween.to(this.normalState,{y:this.upY},500,Laya.Ease.backOut,Laya.Handler.create(this,this.showComplete));
}
//停留
_proto.showComplete = function(){
if(this.isShow && !this.isHit){
//让地鼠停留2秒 第一个参数停留时间,第二个参数执行域,第三个是回调
Laya.timer.once(2000,this,this.hide)
}
}
//消失
_proto.hide = function(){
if(this.isShow && !this.isHit){
this.isShow = false;
Laya.Tween.to(this.normalState,{y:this.downY},300,Laya.Ease.backIn,Handler.create(this,this.reset));
}
}
//受击
_proto.hit = function (){
if(this.isShow && !this.isHit){
this.isShow = false;
this.isHit = true;
//隐藏常态图 显示受击图
this.normalState.visible = false;
this.hitState.visible = true;
//清楚可能未被到时间的停留定时记 第一个参数是执行域 第二个参数是清楚的定时器方法
Laya.timer.clear(this,this.hide);
//让地鼠停留一会后消失
Laya.timer.once(500,this,this.reset);
}
}
return Mole;
})();