Quantcast
Channel: Cocos中文社区 - 最新主题
Viewing all articles
Browse latest Browse all 88774

prefab疑问

$
0
0

@yanglei0321 写道:

第一次用到prefab,在飞机游戏内,做了一个敌人的prefab,由一个精灵组件外加一个js脚本组成,本来是想着能复用成多个不一样的敌人,但发现无法修改onload方法中定义的速度属性(this.speed = cc.v2(0, -1);无法修改),properties中定义速度也无法改变,尝试类外定义var _speed,然后定义方法修改这个值去改变速度,但是所有用到这个prefab创建的敌人的速度会一起被改变,现在不知道该怎么办了,难道要为每个敌人都创建一个prefab吗?感觉这样太浪费,方法都一样,就是属性有差别。

代码如下
这是敌人prefab下的js脚本
//敌人速度
var _speed = cc.v2(0, -1);

cc.Class({
extends: cc.Component,

properties: {
    
},

// use this for initialization
onLoad: function () {
    this.speed = cc.v2(0, -1);
},

//替换精灵
replaceSpriteFrame: function(spriteFrameName) {
    //替换精灵
    var sprite = this.node.getComponent(cc.Sprite);
    sprite.spriteFrame = loadRes.getSpriteAtlasFrameRes("role/sp_all", spriteFrameName);
    //设置碰撞区域
    var boxCollider = this.node.getComponent(cc.BoxCollider);
    boxCollider.size.width = this.node.getContentSize().width * 0.8;
    boxCollider.size.height = this.node.getContentSize().height * 0.3;
},

//设置速度
setBulletSpeed: function(speed) {
    this.speed = speed;
},

update: function() {
    var position = cc.pAdd(this.node.getPosition(), this.speed);
    if (position.y <= -cc.winSize.height * 0.5 - this.node.getContentSize().height * 0.5) {
        cc.log("destroy");
        this.node.destroy();
    }
    else {
        this.node.setPosition(position);
    }
},

onCollisionEnter: function(other, self) {
    this.node.destroy();
},

});

这是创建敌人的类

cc.Class({
extends: cc.Component,

properties: {
    enemy: cc.Prefab
},

// use this for initialization
onLoad: function () {

},

//开启敌人产生控制器
startEnemyController: function() {
    //控制器属性
    this.produceSpeed = 1;
    
    this.node.runAction(cc.sequence(cc.delayTime(enemyDelayTime), cc.callFunc(function() {
        //开始出现敌人
        this.startProduceEnemy();
    }, this)));
},

//开始产生敌人
startProduceEnemy: function() {
    //产生敌人
    this.schedule(this.produceEnemy.bind(this),this.produceSpeed);    
},

//更换敌人控制器
replaceBulletController: function() {
    //停止旧的
    this.unschedule(this.produceEnemy);
    
    //设置新属性
    
    //开始新的
    this.startProduceEnemy();
},

//产生敌人
produceEnemy: function() {
    var enemy = cc.instantiate(this.enemy);
    var enemyPrefab = enemy.getComponent("enemyPrefab");
    
    var arr = [201, 202];
    var index = Math.floor(Math.random() * 2);
    var enemyAttriArray = enemyAttri.getAttriByType(arr[index]);
    
    enemyPrefab.replaceSpriteFrame(enemyAttriArray[0]); //图片
    enemyPrefab.setBulletSpeed(enemyAttriArray[1]); //速度
    
    enemy.group = "enemy";
    var x = Math.random() * 300 - 150;
    enemy.setPosition(x, 300);
    enemyPrefab.enemyMove();
    
    this.node.addChild(enemy);
},



// called every frame, uncomment this function to activate update callback
update: function (dt) {
    
},

});

有很多还未封装的临时方法,凑合看吧,产生敌人的类是从发射子弹的类直接粘过来,有很多是我对于子弹变化预留的方法,这里还得修改,不过不影响看现在的问题

帖子: 5

参与者: 1

阅读整个主题


Viewing all articles
Browse latest Browse all 88774

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>