在tilemaps中移动玩家

时间:2014-08-25 21:39:25

标签: javascript

我正在使用vanilla tilemaps,我不确定是否有与tilemaps有关的软件,但是如果有确定我只是使用普通的javascript,我有一个问题,但我想移动x的一个按下按钮时播放器,但它不移动,播放器为绿色,并由贴图上的数字4标识。

它注册我按下按钮(在控制台中),但根本不移动播放器,任何人都可以指出问题吗?看看第62-89行,那些除了一些全局变量之外主要发生错误。

这里是jsfiddle的链接,我使用了这个,因为我需要显示块不移动。 http://jsfiddle.net/8jr2ha3h/

var playerY = 0;
var playerX = 0;
var moveLeft = 65;
var moveRight = -65;

//THE PLAYER
player.onload = function(){
    for(var i = 0; i < mapArray.length; i++){
        for(var j = 0; j < mapArray[i].length; j++){
            if(mapArray[i][j]==4){
                context.drawImage(player, playerX, playerY, 45,37);
            }

            playerX+=45;
        }
        playerX = 0;
        playerY +=37;
    }
};

//KEY FUNCTIONS
document.onkeydown = function(e) {
//identifying that it's a window event.
    e = e || window.event;
    switch(e.which || e.keyCode) {
        //37 is key for left arrow.
        case 37:
        {
            playerX = playerX - moveLeft;
            console.log(playerX);
            console.log('left');
        }
        break;
    }
}    

1 个答案:

答案 0 :(得分:0)

好像你只是在player.onload()中吸引玩家。您可能希望将所有渲染代码放在一个render()函数中,并可能在player.onload()中调用它,然后在屏幕发生变化时调用该函数(玩家移动,敌人移动) / die,地图因任何原因而发生变化......您需要重绘的原因有很多。

你可能想在这里考虑一个主要的游戏循环,这将(非常简单地)成为一个效果:

while (true) { checkForInputFromThePlayer(); // this can update player coordinates, etc doSomeAI(); // Move some enemies around, have them attack the player render(); }

编辑:在yckart对requestAnimationFrame at a limited framerate

的回答