从0开始用CocosCreator开发飞机大战小游戏(六)

80 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情

上一次我们说了子弹的移动,今天我们说下产生敌机,建造一个敌机工厂

1. (1)在script文件夹下新建脚本enemyFactory.ts image.png

(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 image.png

(2)关联敌机图片资源 image.png (3)在script文件夹下新建一个enemy.ts脚本。 image.png

(4)将脚本enemy.ts关联到enemy节点上 image.png

(5)将enemy节点拖动到prefab文件夹下,并且删除enemy节点。这样敌机的预制体就制作完了。 image.png

3.打开常驻脚本persistNode.ts添加装饰器

    @property(Prefab)

    enemyPrefab:Prefab=null;

4. 将敌机预制体enemy关联到 PersistNode常驻节点上。 image.png

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,关联敌机图片 image.png

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 image.png

今天就到这里了,主要说了敌机的建造工厂,但还没有完善,下一次再来说说怎样完善这个敌机工厂。可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家