为什么在这个函数里面没有定义“sprite”?

时间:2013-05-16 21:44:42

标签: javascript html5 canvas undefined typeerror

有疑问:http://jsfiddle.net/dqDAv/2/

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

对象

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
);
}

1 个答案:

答案 0 :(得分:2)

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

这样的事情非常容易解决,例如Chrome调试器甚至console.log()调用。您只需要从代码中的某个点开始向后工作,在这一点上您会发现事情并非您所期望的。在这种情况下,这将是您调用“drawSprite()”的点。如果“sprite”未定义,则必须表示传入的内容未定义 - 变量“player”。因此在调用“drawSprite()”之前设置一个断点,其中“player”被初始化,另一个断点。等等。