1

有问题的小提琴:http: //jsfiddle.net/dqDAv/2/

在第 146 行,我将对象作为方法中"Player"的参数传入spriterender()

目的

var player = new Sprite({
    'left': spriteLeftAnim,
    'right': spriteRightAnim
}, 'right', canvas.width / 2, canvas.height / 2, 44, 108, 100);

方法

function Render() {
ctx.clearRect(0,0, 500, 500);
ctx.beginPath();
ctx.moveTo(0,400);
ctx.lineTo(500,400);
ctx.stroke();
ctx.closePath();
ctx.stroke(); 
drawSprite(player); // <- Parameter
}

那么,为什么没有sprite定义在:

function drawSprite(sprite) {
ctx.drawImage(
    sprite.stateAnimations[sprite.currentState].tileset.image, 
    sprite.stateAnimations[sprite.currentState].frames[sprite.stateAnimations[sprite.currentState].currentFrame].split(',')[0] * sprite.stateAnimations[sprite.currentState].tileset.tileWidth,
    sprite.stateAnimations[sprite.currentState].frames[sprite.stateAnimations[sprite.currentState].currentFrame].split(',')[1] * sprite.stateAnimations[sprite.currentState].tileset.tileHeight,
    sprite.stateAnimations[sprite.currentState].tileset.tileWidth,
    sprite.stateAnimations[sprite.currentState].tileset.tileHeight,
    Math.round(sprite.x),
    Math.round(sprite.y),
    sprite.width,
    sprite.height
);
}
4

1 回答 1

2

这是因为您在初始化“播放器”之前调用了“循环()”。

使用 Chrome 调试器,甚至console.log()调用之类的东西,这样的事情非常容易解开。您只需要从代码中发现事情不是您期望的那一点开始向后工作。在这种情况下,这就是您调用“drawSprite()”的地方。如果“sprite”未定义,那么这一定意味着传入的任何内容都是未定义的——变量“player”。所以在初始化“player”的地方放一个断点,在调用“drawSprite()”之前放一个断点。等等。

于 2013-05-16T21:55:26.797 回答