敌人巡逻系统

时间:2016-03-21 16:48:10

标签: cocos2d-x cocos2d-js

cc.Class({
    extends: cc.Component,

    properties: {

        flags: {
          default: [],
          type: [cc.Node],
        },
        speed: 2,
        _currentMove: 0,
        _forward: true,
    },

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

    },

    start: function () {
        this.node.position = this.flags[0].position;

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

        movement: function () {
// comparePos is a custome helper method, check bottom of script
            if (this.comparePos(this.node.position,  this.flags[this._currentMove].position)
            && this._forward) {
                this._currentMove++;
                this.moveActions();

        }
        else if (this.comparePos(this.node.position, this.flags[this._currentMove].position)
        && !this._forward) {
            this._currentMove--;
            this.moveActions();
        }  

        if (this._currentMove >= this.flags.length - 1) {
            this._currentMove = this.flags.length - 1;
            this._forward = !this._forward;
        }
        else if (this._currentMove <= 0) {
            this._currentMove = 0;
            this._forward = !this._forward;
        }
    },

    moveActions: function () {
        var move = cc.moveTo(this.speed, this.flags[this._currentMove].position);
        this.node.runAction(move);
    },

    comparePos: function (a, b) {
        return Math.round(a.x) == Math.round(b.x) && 
        Math.round(a.y) == Math.round(b.y)
    },

});

我正在使用Cocos Creator,基本上我有一些空物体,我希望我的敌人来回巡视那些物体。问题是敌人会完成一整轮(向所有物体移动并向后移动)然后在返回第一个物体时给我错误,奇怪的是,有时它会在发出错误之前完成超过1轮:

Uncaught TypeError: Cannot read property 'position' of undefined

可能是因为位置比较不够准确,但我不知道怎么做。

更新 我终于解决了,问题出在这里:

this._forward = !this._forward;

我把它更改为:

this._forward = true; // and false down below

这非常奇怪,但现在工作正常:/

2 个答案:

答案 0 :(得分:0)

这似乎是一个JavaScript问题。请参阅herehere

根据一个答案,这发生在:

- 对象具有属性,其值未定义。

- 对象具有属性,其值未定义。

- 对象没有属性。

(我不知道JS所以我无法告诉你在你的代码中到底是什么原因造成的。)

答案 1 :(得分:0)

这是这一行:

  <template id="my_parent" inherit_id="foo.parent_id">
    <div id="product">
      <t t-call="foo.parent_id" />
    </div>
  </template>

或这一行:

          if (this.comparePos(this.node.position,  this.flags[this._currentMove].position)

你的this._currentMove超出数组大小范围,或者this.flags []数组在该位置上未定义。添加其他日志记录以获取确切的方案