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秒创建一个敌机,并将出生位置设置随机