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
这非常奇怪,但现在工作正常:/
答案 0 :(得分:0)
这似乎是一个JavaScript问题。请参阅here或here。
根据一个答案,这发生在:
- 对象具有属性,其值未定义。
- 对象具有属性,其值未定义。
- 对象没有属性。
(我不知道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 []数组在该位置上未定义。添加其他日志记录以获取确切的方案