背景是写了一个简单的小机器人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什么对象
大概明白了 精灵在另一个场景中生成 然后调用公共的移动方法是这个意思么