cocos2d飞机大战

1.assets下新建文件夹resource,并将图片资源拖到该文件夹
2.层级管理器创建bg空节点,将背景图片bg1和bg2拖到bg节点下
3.assets下新建Script文件夹,在该文件夹下新建ts文件,将文件拖到bg节点属性检测器
4.双击ts文件进入代码编辑器中编辑背景图片
编辑脚本:
update (dt) { //dt = 1帧 = 1/60 秒
//获取 当前节点(bg)下的 子节点(背景图片节点bg.png)
for(let bgNode of this.node.children){

    //y轴方向  每秒向下移动50个像素   bgNode.y = 50意为每帧移动50像素
    bgNode.y -= 50 * dt;

    //如果第一张背景图全部滑出,将其移动到第二张背景图后面接上
    if(bgNode.y <= -800){
        bgNode.y += 1600;   //不能直接=赋值,会产生黑线
    }
}

}

5.飞机节点
5.1将飞机图片拖到层级管理器
5.2 新建飞机脚本文件playerControl.ts,拖到飞机节点属性检查器
5.3 双击打开飞机脚本文件playerControl.ts,编辑飞机脚本
start () {
//触摸事件(事件类型为 触摸移动,事件内容)
this.node.on(cc.Node.EventType.TOUCH_MOVE,(event)=>{
// console.log(“鼠标点击”+event);

    //设置当前节点对象坐标为(触摸位置坐标)
    this.node.setPosition(event.getLocation());
});

}

6.子弹节点
6.1将子弹图片拖至层级管理器成为bullet节点
6.2再从层级管理器将子弹节点bullet拖至资源管理器assets下成为预制体
6.3在飞机脚本文件playerControl.ts中新建预制体属性BulletPre
@property(cc.Prefab)
BulletPre:cc.Prefab = null; //创建预设体

6.4 将assets下的bullet预制体拖到飞机节点的属性检查器中playerControl脚本的Bullet Pre预制体中

6.5在playerControl脚本中start()中使用schedule()计时器创建子弹对象并编辑
start () {
//触摸事件(事件类型为 触摸移动,事件内容)
this.node.on(cc.Node.EventType.TOUCH_MOVE,(event)=>{
// console.log(“鼠标点击”+event);

    //设置当前节点对象坐标为(触摸位置坐标)
    this.node.setPosition(event.getLocation());
});

//计时器schedule(参数一:执行方法,参数二:执行间隔秒,参数三:执行总次数,参数四:第一次执行时间)
this.schedule(()=>{
//创建子弹对象
let bullet = cc.instantiate(this.BulletPre);

    //设置子弹父节点为当前场景
    bullet.setParent(cc.director.getScene());

//配置子弹的初始位置
    bullet.x = this.node.x;
    bullet.y = this.node.y + 90;
},0.5);   //每0.5秒创建一个子弹对象

}
6.6在子弹脚本中配置子弹飞行速度轨迹和销毁
update (dt) {
//设置子弹飞行
this.node.y += 800 * dt; //每秒飞800个像素

//当子弹飞出屏幕就销毁
if(this.node.y > 850){
    this.node.destroy();
}

}
7.敌人节点
(1)拖图片创建节点
(2)添加碰撞组件
(3)在飞机脚本start()中开启碰撞检测
//开启碰撞检测
cc.director.getCollisionManager().enabled = true;

(4)为敌人节点添加脚本
(5)敌人脚本创建死亡方法(注意:死亡图片boom4必须在assets/resources文件夹下)
//死亡方法
die(){
//加载爆炸图片
cc.loader.loadRes(“boom4”,cc.SpriteFrame,(err,res)=>{
//获取节点的Sprite精灵组件 将组件图片换成上面加载的boom2图片
this.node.getComponent(cc.Sprite).spriteFrame = res;
});

//死亡延迟
setTimeout(()=>{
    //销毁节点
    this.node.destroy();
},300);   //延迟300ms销毁

}
(6)将敌人节点的碰撞组件中的Tag设为1用于判别敌人
(7)子弹脚本中新建碰撞方法
//发生碰撞 other代表碰撞的节点
onCollisionEnter(other){
cc.log(“击中敌人”);
//判断是否是敌人
if(other.tag == 1){
//销毁敌人
other.getComponent(EnemyController).die();
//销毁自己
this.node.destroy();
}
}

8.敌机群生成
(1)新建敌机管理节点EnemyManager
(2)将敌机节点Enemy拖至assets文件夹转成预制体
(3)新建敌机管理节点脚本EnemyManager.ts拖至EnemyManager属性检查器
(4)敌机管理脚本中新建空预制体
(5)将assets中的Enemy预制体拖到EnemyManager节点属性检查器中的脚本预制体项
(6)在敌机管理脚本start()方法中使用计时器每隔2秒创建一个敌机,并将出生位置设置随机

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值