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

189 阅读2分钟

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

上一次我们说了玩家飞机和敌机血条功能,今天我们说下物资这个功能。

1. 制作物资预制体 。

(1)新建一个Sprite(精灵),并且命名为goods image.png

(2) 关联图片资源,并调整下大小 image.png

(3)在script文件夹下新建一个脚本,并且命名为goods image.png

(4)将脚本goods挂载到节点goods上 image.png

(5)将节点拖动到prefab文件夹里 image.png

(6)删除原来的节点goods,这样物资的预制体就制作完了

2. 添加碰撞分组

(1) 打开项目设置的物理 image.png

(2)添加Goods分组 image.png

(3)钩选Goods只能与玩家飞机碰撞

image.png

3. 打开Goods预制体

(1)添加物理组件 image.png

(2)选择分组为Goods image.png

(3)记得保存 image.png

4. 打开persistNode脚本

   (1)添加装饰器

    @property(Prefab)

    goodsPrefab:Prefab=null;

(2)打开常驻节点,关联物资预制体 image.png

(3)定义物资图片装饰器

    @property(SpriteFrame)

    bloodGoods:SpriteFrame=null; //加血物资图片

    @property(SpriteFrame)

    lightGoods:SpriteFrame=null; //激光导弹物资图片

    @property(SpriteFrame)

    missileGoods:SpriteFrame=null; //导弹物资图片

  (4)打开常驻节点PersistNode,关联图片 image.png

5. 创建物资工厂,其实与其他工厂差不多的, 可以参考下敌机工厂

(1)在script文件夹下新建一个脚本,并且命名为goodsFactory image.png

(2)删掉@ccclass('goodsFactory'),并且继承改为gameFactory

import { _decorator, Component, Node} from 'cc';

import { gameFactory } from './gameFactory';

const { ccclass, property } = _decorator;

export class goodsFactory extends gameFactory {

}

  (3)打开global.ts脚本,添加以下常量

    public static BLOODGOODS:string='bloodGoods'

    public static LIGHTGOODS:string='lightGoods'

    public static MISSILEGOODS:string='missileGoods'

(4)添加createProduct函数

import { _decorator, Component, Node, instantiate } from 'cc';

import { gameFactory } from './gameFactory';

import { global } from './global';

import { goods } from './goods';

import { persistNode } from './persistNode';

const { ccclass, property } = _decorator;

export class goodsFactory extends gameFactory {

    public createProduct(productType:string): Node{

        let goodsTeamp:Node=null;

        if(this.productPool.size()>0){

            goodsTeamp=this.productPool.get()

        }else{

            goodsTeamp=instantiate(this.persistNode.getComponent(persistNode).goodsPrefab)

        }

        switch(productType){

            case global.BLOODGOODS:

                goodsTeamp.getComponent(goods).init(productType,this.persistNode.getComponent(persistNode).bloodGoods)

                break;

            case global.LIGHTGOODS:

                goodsTeamp.getComponent(goods).init(productType,this.persistNode.getComponent(persistNode).lightGoods)

                break;

            case global.MISSILEGOODS:

                goodsTeamp.getComponent(goods).init(productType,this.persistNode.getComponent(persistNode).missileGoods)

                break;

        }

        return goodsTeamp

    }

}

6.打开脚本goods.ts,添加物资初始化函数

import { _decorator, Component, Node, SpriteFrame, Sprite } from 'cc';

const { ccclass, property } = _decorator;

@ccclass('goods')

export class goods extends Component {

    goodsType:string=null

    //物资初始化函数

    init(goodsType:string,spriteFrame:SpriteFrame){

        this.goodsType=goodsType;

        this.node.getComponent(Sprite).spriteFrame=spriteFrame

    }

}

今天就到这里了,主要说物资工厂的制作,下次再继续完善物资工厂。可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家