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

これは、「プレーヤー」を初期化する前に「Loop()」を呼び出すためです。

このようなことは、Chrome デバッガーやconsole.log()呼び出しなどで非常に簡単に解明できます。物事が期待どおりではないことがわかったコードのポイントから逆方向に作業する必要があります。この場合、それが「drawSprite()」を呼び出すポイントになります。「スプライト」が定義されていない場合、渡されたものはすべて未定義、つまり変数「プレーヤー」であることを意味する必要があります。したがって、「プレーヤー」が初期化されるブレークポイントと、「drawSprite()」の呼び出しの前に別​​のブレークポイントを配置します。等々。

于 2013-05-16T21:55:26.797 に答える