开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
上一次我们说了子弹的移动,今天我们说下产生敌机,建造一个敌机工厂
1. (1)在script文件夹下新建脚本enemyFactory.ts
(2) 打开enemyFactory.ts脚本, 删除@ccclass('enemyFactory'),并且继承gameFactory
import { _decorator, Component, Node } from 'cc';
import { gameFactory } from './gameFactory';
const { ccclass, property } = _decorator;
@ccclass('enemyFactory')
export class enemyFactory extends gameFactory {
}
2.制作敌机预制体
(1)新建一个Sprite(精灵),并且命名为enemy
(2)关联敌机图片资源
(3)在script文件夹下新建一个enemy.ts脚本。
(4)将脚本enemy.ts关联到enemy节点上
(5)将enemy节点拖动到prefab文件夹下,并且删除enemy节点。这样敌机的预制体就制作完了。
3.打开常驻脚本persistNode.ts添加装饰器
@property(Prefab)
enemyPrefab:Prefab=null;
4. 将敌机预制体enemy关联到 PersistNode常驻节点上。
5. 打开global.ts脚本,添加常量
public static ENEMY_1:string='enemy1'
public static ENEMY_2:string='enemy2'
6. 打开enemy.ts脚本添加敌机初始化函数
import { _decorator, Component, Node, SpriteFrame, Sprite } from 'cc';
const { ccclass, property } = _decorator; @ccclass('enemy')
export class enemy extends Component {
enemyType:string=null
//敌机初始化函数
init(enemyType:string,spriteFrame:SpriteFrame){
this.enemyType=enemyType;
this.node.getComponent(Sprite).spriteFrame=spriteFrame
}
}
7. 打开persistNode.ts脚本,添加敌机图片装饰器
@property(SpriteFrame)
enemy1:SpriteFrame=null; //敌机1图片
@property(SpriteFrame)
enemy2:SpriteFrame=null; //敌机2图片
8. 打开常驻节点persistNode,关联敌机图片
9. 完善敌机工厂,打开enemyFactory.ts脚本
import { _decorator, Component, Node, instantiate } from 'cc';
import { gameFactory } from './gameFactory';
import { global } from './global';
import { enemy } from './enemy';
import { persistNode } from './persistNode'
const { ccclass, property } = _decorator;
@ccclass('enemyFactory')
export class enemyFactory extends gameFactory {
public createProduct(productType:string): Node{
let enemyTeamp:Node=null;
if(this.productPool.size()>0){
enemyTeamp=this.productPool.get()
}else{
enemyTeamp=instantiate(this.persistNode.getComponent(persistNode).enemyPrefab)
}
switch(productType){
case global.ENEMY_1:
enemyTeamp.getComponent(enemy).init(productType,this.persistNode.getComponent(persistNode).enemy1)
break;
case global.ENEMY_2:
enemyTeamp.getComponent(enemy).init(productType,this.persistNode.getComponent(persistNode).enemy2)
break;
}
return enemyTeamp
}
}
10. 回到persistNode.ts脚本
(1)引入
import { enemyFactory } from './enemyFactory';
(2)定义enemyFactory
enemyFactory:gameFactory=null;
(3) 在onLoad函数里实例化
this.enemyFactory= new enemyFactory()
11. 在script文件夹下新建一个脚本,并且命名为mainGame,并且挂载到game场景下的Canvas
今天就到这里了,主要说了敌机的建造工厂,但还没有完善,下一次再来说说怎样完善这个敌机工厂。可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家