COCOS CREATER简单飞机大战代码案例

代码案例实现,飞机移动,发射子弹,自动产生敌机,敌机发射子弹等,脚本简单,代码可执行
,代码注释明显
在这里插入图片描述
FlyBgMoveScript脚本源码设计:

cc.Class({
extends: cc.Component,

properties: {
speed: { type: cc.Integer, default: 1 },
bg1: { type: cc.Node, default: null },
bg2: { type: cc.Node, default: null },
pre_enemy: { type: cc.Prefab, default: null },//预制体敌机
pre_enemyBullet: { type: cc.Prefab, default: null },//预制体敌机子弹
bz: { type: cc.AudioClip, default: null },//爆炸音效
},
onLoad () {
window.enemy = this;//设置全局变量
//敌机对象池
this.enemyPool = new cc.NodePool();
//敌机子弹对象池
this.enemyBulletPool = new cc.NodePool();

var manager = cc.director.getCollisionManager();  // 获取碰撞检测类
manager.enabled = true   //开启碰撞检测
manager.enabledDebugDraw = false //显示碰撞检测区域
this.createTimes = 0;

},

start () {

},

update (dt) {
let self = this;
this.createTimes++;
if (this.createTimes == 60) {
this.createTimes = 0;
}
if (this.createTimes == 0) {
this.createEnemy();
}

self.bg1.y = self.bg1.y - self.speed;
self.bg2.y = self.bg2.y - self.speed;
if (self.bg1.y <= -384) {
  self.bg1.y = 1152;
}
if (self.bg2.y <= -384) {
  self.bg2.y = 1152;
}

},
createEnemy () {
var enemy = null;
let self = this;
if (this.enemyPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
//console.log(‘对象池取预制体’);
enemy = this.enemyPool.get();
} else {
enemy = cc.instantiate(this.pre_enemy);
}
enemy.position = new cc.Vec2(this.EnemyBirthPosition(), 768);
cc.director.getScene().addChild(enemy);
},
onEnemyKilled: function (enemy) {
// bullet 应该是一个 cc.Node
let self = this;
cc.audioEngine.play(self.bz, false, 1);
self.enemyPool.put(enemy);
//加载爆炸预制体
cc.resources.load(“prefab/bom”, function (err, prefab) {
if (!prefab) {
console.log(‘爆炸预制体为空’);
} else {
console.log(‘爆炸预制体加载’);
var bom = cc.instantiate(prefab);
bom.position = new cc.Vec2(enemy.position.x, enemy.position.y);
cc.director.getScene().addChild(bom);
var animat = bom.getComponent(cc.Animation);
animat.play(‘bom’);
var anim1 = animat.getAnimationState(‘bom’);
if (anim1) {
anim1.on(‘finished’, (event) => {
bom.destroy()
}, this);
}
}
});
},
onEnemyKilled2: function (enemy) {
// bullet 应该是一个 cc.Node
let self = this;
cc.audioEngine.play(self.bz, false, 1);
self.enemyPool.put(enemy);
},
//初始化敌人飞机位置
EnemyBirthPosition () {
var chars = [67, 134, 201, 268, 335, 402];
var res = 67;
var id = Math.ceil(Math.random() * 5);
res = chars[id];
return res;
},
createBulletEnemy (enemyNode) {
var enemyBullet = null;
let self = this;

if (this.enemyBulletPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
  //console.log('对象池取预制体');
  enemyBullet = this.enemyBulletPool.get();
} else {
  enemyBullet = cc.instantiate(this.pre_enemyBullet);
}
enemyBullet.position = new cc.Vec2(enemyNode.x, enemyNode.y);
cc.director.getScene().addChild(enemyBullet);

},
onBulletKilled: function (bullet) {
// bullet 应该是一个 cc.Node
this.enemyBulletPool.put(bullet); // 和初始化时的方法一样,将节点放进对象池,这个方法会同时调用节点的 removeFromParent
}
});

FlyMoveScript玩家脚本设计如下:

cc.Class({
extends: cc.Component,

properties: {
speed: { type: cc.Integer, default: 1 },
bg1: { type: cc.Node, default: null },
bg2: { type: cc.Node, default: null },
pre_enemy: { type: cc.Prefab, default: null },//预制体敌机
pre_enemyBullet: { type: cc.Prefab, default: null },//预制体敌机子弹
bz: { type: cc.AudioClip, default: null },//爆炸音效
},
onLoad () {
window.enemy = this;//设置全局变量
//敌机对象池
this.enemyPool = new cc.NodePool();
//敌机子弹对象池
this.enemyBulletPool = new cc.NodePool();

var manager = cc.director.getCollisionManager();  // 获取碰撞检测类
manager.enabled = true   //开启碰撞检测
manager.enabledDebugDraw = false //显示碰撞检测区域
this.createTimes = 0;

},

start () {

},

update (dt) {
let self = this;
this.createTimes++;
if (this.createTimes == 60) {
this.createTimes = 0;
}
if (this.createTimes == 0) {
this.createEnemy();
}

self.bg1.y = self.bg1.y - self.speed;
self.bg2.y = self.bg2.y - self.speed;
if (self.bg1.y <= -384) {
  self.bg1.y = 1152;
}
if (self.bg2.y <= -384) {
  self.bg2.y = 1152;
}

},
createEnemy () {
var enemy = null;
let self = this;
if (this.enemyPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
//console.log(‘对象池取预制体’);
enemy = this.enemyPool.get();
} else {
enemy = cc.instantiate(this.pre_enemy);
}
enemy.position = new cc.Vec2(this.EnemyBirthPosition(), 768);
cc.director.getScene().addChild(enemy);
},
onEnemyKilled: function (enemy) {
// bullet 应该是一个 cc.Node
let self = this;
cc.audioEngine.play(self.bz, false, 1);
self.enemyPool.put(enemy);
//加载爆炸预制体
cc.resources.load(“prefab/bom”, function (err, prefab) {
if (!prefab) {
console.log(‘爆炸预制体为空’);
} else {
console.log(‘爆炸预制体加载’);
var bom = cc.instantiate(prefab);
bom.position = new cc.Vec2(enemy.position.x, enemy.position.y);
cc.director.getScene().addChild(bom);
var animat = bom.getComponent(cc.Animation);
animat.play(‘bom’);
var anim1 = animat.getAnimationState(‘bom’);
if (anim1) {
anim1.on(‘finished’, (event) => {
bom.destroy()
}, this);
}
}
});
},
onEnemyKilled2: function (enemy) {
// bullet 应该是一个 cc.Node
let self = this;
cc.audioEngine.play(self.bz, false, 1);
self.enemyPool.put(enemy);
},
//初始化敌人飞机位置
EnemyBirthPosition () {
var chars = [67, 134, 201, 268, 335, 402];
var res = 67;
var id = Math.ceil(Math.random() * 5);
res = chars[id];
return res;
},
createBulletEnemy (enemyNode) {
var enemyBullet = null;
let self = this;

if (this.enemyBulletPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
  //console.log('对象池取预制体');
  enemyBullet = this.enemyBulletPool.get();
} else {
  enemyBullet = cc.instantiate(this.pre_enemyBullet);
}
enemyBullet.position = new cc.Vec2(enemyNode.x, enemyNode.y);
cc.director.getScene().addChild(enemyBullet);

},
onBulletKilled: function (bullet) {
// bullet 应该是一个 cc.Node
this.enemyBulletPool.put(bullet); // 和初始化时的方法一样,将节点放进对象池,这个方法会同时调用节点的 removeFromParent
}
});

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YAVSFEI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值