我在 Crafty 中使用以下代码。0.5.3(因为 Crafty 0.5.4,我的游戏因未知原因而崩溃,nvm,我对crafty0.5.3 还好,至少现在......)让我的玩家移动 4px 8 次(使其完整32px)但是很慢,通过使用超时,我想每次循环延迟 3 毫秒......循环(?)这样我就可以有 24 毫秒的延迟,这应该与我的动画一起设置。
以下是我正在使用的代码,putMessage 是在我已经制作的消息框中显示一些消息的函数,该函数中的第一个参数是消息,第二个是布尔值,它告诉是否应该将其添加到消息框中(msg += value )或应该替换味精(只有味精=值)
moveLeft: function() {
for (var i = 0; i < 8; i++) {
setTimeout(function() {
var d= new Date();
putMessage(i+1 + "result : " + d.getSeconds() + "." + d.getMilliseconds() + "<br/ >", true);
this.move('w',4);
this.borderCheck();
putMessage(d.getSeconds() + "." + d.getMilliseconds() + "<br>", true);
}, 3)
}
},
这是消息框中的结果,请不要考虑 1digit 后的毫秒数。
9结果:49.493
9结果:49.493
9结果:49.493 9
结果:49.509 9
结果:49.509 9
结果:49.509 9
结果:49.509
9结果:49.509
看到'9',为什么有 9,因为我想,应该有像 1result、2result、....8result、....9 这样的值。9 不应该在任何地方..而第二个 putMessage 似乎没有工作....玩家都没有被移动。但是如果删除 setTimeout() 之类的,
moveLeft: function() {
for (var i = 0; i < 8; i++) {
var d= new Date();
putMessage(i+1 + "result : " + d.getSeconds() + "." + d.getMilliseconds() + "<br/ >", true);
this.move('w',4);
this.borderCheck();
putMessage(d.getSeconds() + "." + d.getMilliseconds() + "<br>", true);
}
},
the result obtained in message box is,
1result : 36.176
36.176
2result : 36.176
36.176
3result : 36.176
36.176
4result : 36.176
36.176
5result : 36.192
36.192
6result : 36.192
36.192
7result : 36.192
36.192
8result : 36.192
36.192
看?完美....更重要的是,玩家移动..!
那么 setTimeout 实际上做了什么......顺便说一句,它在另一个地方工作正常,所以它是否设置了任何限制,比如只执行前 2 行代码之类的?
请帮忙,我对这种语言还很陌生。
先谢谢了
编辑:我在 for 循环之前添加以下行后解决了它
intPlayer = this; //intPlayer = internalPlayer;
然后我用“intPlayer.move”和“intPlayer.borderCheck()”改变了“this.move”和“this.borderCheck()”......事情变得很好......
有人可以解释为什么吗?