2016-11-22 4 views
1

私はこの一日中苦労しています。画像をマウスポインタに追従させることができますが、画像の角度を変えようとすると動作させることができません。ここでコードを確認することができます:jsbin example。 正しい方法でマウスの後に別の黒い四角形がありますが、私はスプライトイメージで動作させることはできません。キャンバスの内側にイメージスプライトをマウスの後につけてください。

答えて

1

画像の中央で回転が発生するように正しく翻訳していません。幅と高さの半分を平行移動し、回転を行い、次に平行移動する必要があります。私はあなたのSpriteImageを正しく変換するためにrenderメソッドを更新しました

this.render = function(xPos, yPos, scale, w, h, angle) { 
    ctx.save(); 

    ctx.translate(xPos, yPos); 
    ctx.translate(w/2, h/2); 
    ctx.rotate(angle); 
    ctx.translate(-w/2, -h/2); 
    ctx.fillRect(0, 0, w, h); 

    //console.log('angle:',angle); 
    ctx.drawImage(this.img, 
     this.x, this.y, 
     w, h, 
     0, 0, 
     width*scale, height*scale); 
    ctx.restore(); 
}; 

[編集] はここで更新されたコードとjsbinへのリンクです:http://output.jsbin.com/tulimaxavu/1/edit

+0

どうもありがとう!それは素晴らしい仕事! –

+0

この時点で、アフィン変換が一般的にどのように動作するのか、それらがjsのキャンバスにどのように関連しているのかを見て回る価値はあります。この場合、各変換は前の変換の「積み重ね」と考えることができ、それらはすべて現在の原点に関して発生します。イメージの中心を回転が発生する場所にするには、そのイメージに平行移動してから回転させる必要があります。次に、左上隅に翻訳する必要があります。その結果、描画するときに正しい位置に表示されます。希望が役立ちます。 –

+0

はい、私は回転の起点をどこに始まったかに戻すことができなかったことを理解する助けとなりました。もう一度感謝します。 –

関連する問題