CocosCreator学习笔记-官方教学-05-scripting-02-prefab(预制体)

【案例1:场景 InstantiatePrefab】在屏幕上不断增加怪物,效果图如下

CocosCreator学习笔记-官方教学-05-scripting-02-prefab(预制体)

 

CocosCreator学习笔记-官方教学-05-scripting-02-prefab(预制体)

步骤1:先制作一个怪物的预制体MonsterPrefab,并将 脚本 MonsterPrefab 挂到上面

CocosCreator学习笔记-官方教学-05-scripting-02-prefab(预制体)

monsterPrefab脚本随机选择一个怪物的贴图给prefab上

//  脚本 MonsterPrefab
var Helpers = require('Helpers');//引用脚本 Helpers

cc.Class({
    extends: cc.Component,

    properties: {
        spriteList: {
            default: [],
            type: [cc.SpriteFrame]
        }
    },

    // use this for initialization
    onLoad: function () {
        var randomIdx = Helpers.getRandomInt(0, this.spriteList.length);
        var sprite = this.getComponent(cc.Sprite);
        sprite.spriteFrame = this.spriteList[randomIdx];
    }

});
// help 脚本
if (CC_JSB && cc.runtime) {
    // fix cocos-creator/fireball#3578
    cc.LoaderLayer.setUseDefaultSource(false);
    cc.Dialog.setUseDefaultSource(false);
}

// Returns a random integer between min (included) and max (excluded)
function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}

module.exports = {
	getRandomInt: getRandomInt
};

知识点:

随机函数:Math.random() * num  随机数函数 返回       0<=x < 1

例子:Math.random() *100  返回 0<=x<100 

模块化脚本:module.exports= {};

https://docs.cocos.com/creator/manual/zh/scripting/modular-script.html?h=module.exports

步骤2 :随机生成怪物,数量可控

cc.Class({
    extends: cc.Component,

    properties: {
        root: {
            default: null,
            type: cc.Node
        },
        prefab: {
            default: null,
            type: cc.Prefab
        },
        canvas: {
            default: null,
            type: cc.Canvas
        },
        numberToSpawn: 0,
        spawnInterval: 0
    },
    
    addSpawn: function () {
        if (this.spawnCount >= this.numberToSpawn) {
            this.clearRepeater();
            return;
        }
        var monster = cc.instantiate(this.prefab);
        monster.parent = this.root;
        //this.canvas.node.addChild(monster);
        monster.position = this.getRandomPosition();
        this.spawnCount++;
    },

    // use this for initialization
    onLoad: function () {
        var self = this;
        self.randomRange = cc.p(300, 200);
        self.spawnCount = 0;
        self.schedule(self.addSpawn, self.spawnInterval);
    },

    getRandomPosition: function() {
        return cc.p(cc.randomMinus1To1() * this.randomRange.x, cc.randomMinus1To1() * this.randomRange.y);
    },

    clearRepeater: function() {
        this.unschedule(this.addSpawn);
    },
});