0

进入 JS 游戏开发,但遇到了一个小问题。图像不会绘制。它加载正常,控制台中没有错误,但它不会显示。我错过了什么?

JS

var Game = {
characterSpeed: 2,
characterHorizontalSpeed: this.characterSpeed,
characterVerticalSpeed: this.characterSpeed,
characterX: 400,
characterY: 500,
mouseX: 0,
mouseY: 0,
gameRunning: false,
debug: true,
characterImg: '',
context: '',

init: function() {
    $('#game').mousemove(function(event) {
        Game.mouseX = event.pageX;
        Game.mouseY = event.pageY;
    });

    Game.context = document.getElementById('game').getContext('2d');

    Game.loadImages();
    Game.game();
},

loadImages: function() {
    Game.characterImg = new Image;
    Game.characterImg.src = 'images/character.png';

    Game.characterImg.onload = function() {
        Game.context.drawImage(Game.characterImg, 400, 500);
    }
},
}

$(function() {
Game.init();
});

HTML

    <div id="inner">
        <canvas id="game" style="background: white; width: 800px; height: 500px;"></canvas>
    </div>
4

3 回答 3

0

您需要在样式中设置画布大小widthheight不在样式中的属性。

<div id="inner">
    <canvas id="game" width="800" height="500"></canvas>
</div>
于 2013-02-01T22:32:21.953 回答
0

尝试在最后设置 src 属性,所以在 onload 之后。

loadImages: function() {

    Game.characterImg = new Image();

    Game.characterImg.onload = function() {
        Game.context.drawImage(Game.characterImg, 400, 500);
    }

    Game.characterImg.src = 'images/character.png';

}
于 2013-02-01T22:40:30.487 回答
0

图像可能在您的缓存中,因此当您设置 onload 事件时,图像已经加载,因此不会调用 onload。只需颠倒顺序,如下所示:

Game.characterImg.onload = function() {
      Game.context.drawImage(Game.characterImg, 400, 500);
   }
Game.characterImg.src = 'images/character.png';
于 2013-02-01T22:44:41.657 回答