Javascript 按下键时,精灵消失

Javascript 按下键时,精灵消失,javascript,jquery,html,Javascript,Jquery,Html,我现在正在努力让我的播放器精灵在我的屏幕上移动,但是当按下一个键时,精灵似乎就消失了!我在firebug中没有出现任何错误,所以我假设精灵没有被正确地重新绘制,或者没有沿着这些线绘制 以下是我的播放器代码: function Player() { var sprite = new Sprite(), player, x, y, w = sprite.width, h = sprite.height, speed = 4; this.init_Play

我现在正在努力让我的播放器精灵在我的屏幕上移动,但是当按下一个键时,精灵似乎就消失了!我在firebug中没有出现任何错误,所以我假设精灵没有被正确地重新绘制,或者没有沿着这些线绘制

以下是我的播放器代码:

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);
};
 }
然后在我的主游戏循环中,我有现在、增量和最后的时间,以及对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);
 }
就像我在顶部说的,我的精灵在按键时所做的一切都消失了。您可以看到上面的代码是我为玩家提供的所有代码,所以这里的某个地方有bug

我将如何使用我设置的基于时间的动画使我的精灵在屏幕上移动

谢谢

编辑

另外,为了让您知道,我的最后一次更新等于Date.now()我的更新调用开始前的行如下所示:

function game_init(state) {
    game_settings(state);
    last_update = Date.now();
    update();
}
编辑2
在持续的观察中,精灵似乎并没有消失,只是离游戏屏幕很远而已。。。所以另一个猜测是我的计算在某个地方出错了?

所有排序的家伙,我用这个小教程移动了我的角色!对于初学者来说,非常容易阅读和理解。


专业人士对本教程有何看法?

我猜上次更新最初是0。您的第一个增量将是巨大的(即,现在将相等),并导致屏幕外绘图。请注意键入错误。大型书面函数名
Player
并调用
Player
那么修复@SB的最佳方法是什么?您可以在第一次循环时将last\u update设置为now-基本上,如果last\u update为零,则将其设置为now。delta将为零,然后在下一个循环中就可以了。取决于您要查找的行为。@codelio我是这样构造文件播放器的:
Player=newplayer()
function game_init(state) {
    game_settings(state);
    last_update = Date.now();
    update();
}