我目前正在努力让我的播放器精灵在我的屏幕上移动,但是当按下一个键时,所有精灵似乎都消失了!我在萤火虫中没有出现任何错误,所以我假设精灵没有被正确重绘或类似的东西。
这是我的播放器代码:
function Player()
{
var sprite = new Sprite(),
player,
x,
y,
w = sprite.width,
h = sprite.height,
speed = 4;
this.init_Player = function(pos_X, pos_Y){
player = sprite.load("player");
x = pos_X;
y = pos_Y;
};
this.update = function(delta) {
var calculated_speed = (speed * delta) * (60/1000);
$(document).keydown(function(e)
{
var cancel_default = (e.which === 32 || (e.which > 36 && e.which < 41));
cancel_default && e.preventDefault();
if(e.keyCode == 37){
x -=calculated_speed;
}
else if(e.keyCode == 38){
y -=calculated_speed;
}
else if(e.keyCode == 39){
x +=calculated_speed;
}
else if(e.keyCode == 40){
y +=calculated_speed;
}
});
};
this.draw = function() {
ctx.drawImage(player,x, y, w ,h);
};
}
播放器是在我的主游戏 javascript 文件中创建的,如下所示:
player.init_Player(location_X,location_Y);
然后在我的主游戏循环中,我有现在,增量和最后一次以及对 player.update 和 player.render 的调用,如下所示:
function update(){
now = Date.now();
delta = now - last_update;
ctx.clearRect(0,0,canvas.width,canvas.height);
gameGUI.update();
player.update(delta);
player.draw();
last_update = now;
setTimeout(update,1);
}
就像我在顶部说的那样,我的精灵在按键上所做的所有事情都消失了。您可以在上面看到的代码是我为播放器拥有的所有代码,所以这里的某个地方是错误!
我将如何使用我设置的基于时间的动画来让我的精灵在屏幕上移动?
谢谢
编辑
另外让您知道,我的 last_update 等于 Date.now() 在我的更新调用最初发出之前的行,如下所示:
function game_init(state) {
game_settings(state);
last_update = Date.now();
update();
}
编辑 2 在继续检查时,精灵似乎并没有消失,只是从游戏屏幕上移了很远……所以另一个猜测是我的计算在某个地方是错误的?