代码案例实现,飞机移动,发射子弹,自动产生敌机,敌机发射子弹等,脚本简单,代码可执行
,代码注释明显

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
}
});

COCOS CREATER简单飞机大战代码案例相关推荐

  1. Cocos creator实现飞机大战空中大战《战击长空》小游戏资源及代码

    Cocos creator实现飞机大战空中大战小游戏资源及代码 最近在学习Cocos Creator,作为新手,刚刚开始学习Cocos Creator,刚刚入门,这里记录一下飞机大战小游戏实现.搜索微 ...

  2. MFC实现简单飞机大战(含游戏声音)

    1 实验内容 本实验主要是实现简单的飞机大战游戏,包含游戏声音.碰撞后爆炸效果,有大小敌机等.所用到的知识点如下: 1.贴图技术 2.飞机类.子弹类实现 3.位图移动 4.碰撞判断,实现爆炸效果 5. ...

  3. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  4. java版飞机大战代码

    java版飞机大战代码 前言 Plane PlaneStatus类 Power类 Gift Diji play类 over类 MainFrame主类 MyZiDan DijiZiDan Before ...

  5. Java练习之坦克大战!!!复制可以直接用!!!文章最后有飞机大战代码!!!

    用Java写一个入门游戏--坦克大战! 源代码!!!复制可以直接用!!! 文章最后还有飞机大战代码!!! 本代码写的较为入门,有需要的铁铁们可以去看看!!! 在往期我们讲解了窗口.循环.数组和继承的一 ...

  6. python飞机大战计分代码_Python 飞机大战代码练习

    Python 飞机大战代码练习 最近在自学Python,参照代码自己写了一遍飞机大战游戏的代码.主要应用的模块为pygame.整个代码如下所示,主要分为主模块和各种精灵类定义模块,记录一下自己的学习历 ...

  7. 西瓜大战java_Java中的线程及(简单飞机大战)实现

    在讲到线程之前我们先聊一下程序,进程,线程这三者的概念: 程序是指为了实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合. 程序存储在磁盘上,由一系列的文件+数据组成. 进程:程序运行起来之 ...

  8. 飞机大战(案例详解)

    前言 飞机大战是一个非常经典的案例,因为它包含了多种新手需要掌握的概念,是一个非常契合面向对象思想的入门练习案例 程序分析: 在此游戏中共有六个对象: 小敌机Airplane,大敌机BigAirpla ...

  9. java飞机大战背景图片_Java简单飞机大战(1)

    在完成了多线程小球之后,就可以写一个飞机大战小游戏了,虽然比较简单,但玩起来还是有一点乐趣的.下面就讲一下我的大概思路和一些实现步骤. 一开始当然要想好一个框架,毕竟框架还是很重要的.当点击开始按钮的 ...

最新文章

  1. spring boot 文件上传工具类(bug 已修改)
  2. 前缀和?or差分序列?
  3. 学习鸟哥的Linux私房菜笔记(3)——基础使用
  4. mysql 行转列 (结果集以坐标显示)
  5. 【FPN车辆目标检测】数据集获取以及Windows7+TensorFlow+Faster-RCNN+FPN代码环境配置和运行过程实测
  6. VIM E297: Write error in swap file
  7. LeetCode:每日一题(2020.4.8)
  8. 读取cpu温度的api_获取CPU的温度的方法
  9. amd cpu排行_amd cpu性能 排行榜_amd处理器性能排行
  10. mac word 2016中文输入问题解决
  11. 华大单片机HC32L130/HC32L136红外端口配置
  12. MonoX被偷袭?快准狠直击命门
  13. 仿QQ登陆客户端登陆界面
  14. 芯盾时代: 开启“智慧身份认证”新时代
  15. Oracle 10g的闪回机制
  16. kubelet源码分析(二)之 NewMainKubelet
  17. stata F值缺失_Stata数据处理: 面板数据填充和补漏
  18. MIKE 21 教程 1.5 基于卫星影像绘制河道边界
  19. 连浏览器都卷,64g小内存手机配不上夸克的光环了
  20. 英语思维VS汉语思维

热门文章

  1. Python中的排序函数
  2. 双11购物优惠劵 满减计算程序
  3. 不能访问网络位置的解决方法:
  4. C语言:动态内存管理
  5. 刘邦------- 大风起兮云飞扬
  6. WIN11系统 PIN(window hello) 该选项目前不可用
  7. 用gsl计算非方阵矩阵除法--解线性方程
  8. 安全经过广州火车站攻略(去广州的必看)
  9. VS2008的黑色皮肤
  10. 计算机网络威胁和解决方法总结,计算机网络论文的总结.docx