我的方法,Chomp.prototype.animate
无效。当函数不适用Chomp.prototype.playerMove
时,我的代码可以正常工作。
当应用Chomp.prototype.playerMove
时,在addEventListener之前涉及counter
的if语句有时可以执行addEventListener,即使counter
大于1,那么它执行函数的时间也是如此addEventListener多次,具体取决于代码在执行之前的运行时间。那些时候,它不应该执行addEventListener,如果确实如此,那么应该将counter添加到多个,然后不再执行。计数器被添加到多个,即使在多次执行addEventListener的这些时间。
更奇怪的是,当Chomp.prototype.animate
总是将counter
设置为1而不是0时,它仍然会执行一次if (counter < 1)
的if语句。此外,当应用Chomp.prototype.playerMove
时,Chomp.prototype.chomping
无法正常工作。 (它没有Chomp.prototype.playerMove
)。这很奇怪,我不明白这个问题。
如果我的代码的某个部分有请求,那么我可以发布,但我的完整代码可能并不是对这个问题都有用。
var counter = 0;
var rotation;
var Chomp = function(x, y) {
/*many properties*/
}
Chomp.prototype.chomping = function() {
/*properties and conditions, etc.*/
}
Chomp.prototype.animate = function() {
var that = this;
Chomp.prototype.chomping.apply(this);
Chomp.prototype.playerMove.apply(this);
//counter = 1;
counter = 0;
setTimeout(function(){
Chomp.prototype.animate.apply(that);
}, 100);
}
Chomp.prototype.playerMove = function() {
var that = this;
/*values*/
var yNew = 0, xNew = 0, rotate = "";
var once = function(event) {
/*conditions for keys, etc.*/
Chomp.prototype.move.call(that, xNew, yNew, rotate);
/*values*/
removeEventListener("keydown", once);
}
if (counter < 1)
addEventListener("keydown", once);
/*more code*/
}
Chomp.prototype.move = function(xNew, yNew, rotate) {
var that = this;
counter += 1;
/*loops, conditions, etc.*/
var yellow = new Chomp(30, 60);
Chomp.prototype.animate.apply(yellow);
提前致谢! :)
答案 0 :(得分:0)
您在调用yellow
时应用Chomp.prototype.animate
上下文。当您在yellow
声明中时,Chomp
(this
的实例将绑定到Chomp.prototype.animate
,这意味着您对{{1}的所有绑定现在绑定到Chomp实例this
,而不是yellow
对象。我不确定为什么你使用Chomp.prototype
来调用原型方法中的所有方法,如果你计划将它们用于Chomp.prototype
而不是Chomp
的实例(它们是两个)不同的对象!)。在所有Chomp.prototype
方法中使用this
可能更有意义。
有必要查看剩下的代码,因为你的原型在你刚刚展示Chomp.prototype
的其他方法中产生了大量的副作用,我不确定这些副作用的逻辑是什么在您的程序中触发...发布更多代码或PM我,我们可以一起工作在一个重构,以避免这些问题。干杯
P.S。我希望将此作为评论发布,但它太长了