cocos js new多个节点而节点动作只运行一个的情况

背景是写了一个简单的小机器人AI 然而new robot 时出现只有一个Robot 动作行走的情况。归档.zip (3.2 KB)<a class=“attachment”

创建了一个Action,然后直接应用到很多robot?

是的话,就是后续的 action 没调 clone( ) 的问题

不是创建一个Action 而是在Robot 这个节点的类中应用了一系列的Action 然后在new Robot 这个节点的时候出现了只有一个节点的Action执行了的情况。

面对对象 this

能说的具体点么? Robot节点中的动作 是使用的this对象执行的

你的那个机器人是new 出来的还是复制的

new

代码看看

var Robot = cc.Node.extend({
robotSpr: null,
_speed: null,
dirCur: null,
layerThis : null,
ctor: function () {
this._super();
var TileSize = 32;
_speed = 0.4;
dirCur = null;
layerThis = this;

    this.enemyMoveTime = _speed
    robotSpr = new cc.Sprite('hero.jpg');
    
    robotSpr.setPosition(TileSize * 3 - 16, TileSize * 2 - 16);
    this.addChild(robotSpr);

    this.schedule(this.move, _speed);
},

move: function () {

    var gidArr = ScenePlay.getCurrentTileGid(ScenePlay.getCurrentLocation(robotSpr));
    
    if (dirCur == null) {
        dirCur = Math.floor(Math.random() * nextDir.length);
    }

    if (dirCur == 1 || dirCur == 3) {
        if (gidArr[0] == TileId.wall && gidArr[2] == TileId.wall) {

        }else{
            var condition = true;
            do {
                dirCur = Math.floor(Math.random() * nextDir.length);
                if (gidArr != TileId.wall) {
                    condition = false;
                }
            } while (condition);
            
        }
    } else {
        if (gidArr[1] == TileId.wall && gidArr[3] == TileId.wall) {

        }else{
            var condition = true;
            do {
                dirCur = Math.floor(Math.random() * nextDir.length);
                if (gidArr != TileId.wall) {
                    condition = false;
                }
            } while (condition);
        }
    }
    
    ScenePlay.move(robotSpr, nextDir[dirCur], false);

},

});

部分判断的方法在另一个场景中,并且该场景new 这个Rotbot一次是没有问题的 多次就会出现Action指运行一个的问题

我在想 是不是你的精灵每次被new出的的时候 把你上个的精灵的行走冲突了 导致 new到最后 就是最后那个精灵在行走

new 出来的东西不是申请的独立内存么? 怎么会产生冲突呢? 并且我的动作的是在这个节点中实用的。 我就很纳闷了

是的 你的动作也要跟着面对对象 否则 你每次new的对象会把上的对象的动作给冲突掉

好比如说 你的精灵是个对象 而动作不是对象 这样相当于精灵是单独 而动作是公共的,

  • -。 那么我要怎么把这个精灵的动作私有化呢?

this 啊 我不知道你为什么想那么复杂 你直接复制这个精灵 然后this.变量接住,然后去点动作不就完事了吗

实在不行就换种思路用另一种方法

另一种思路??

就我刚刚说的 简单 明了 还new什么对象

大概明白了 精灵在另一个场景中生成 然后调用公共的移动方法是这个意思么