キャンバス間でデータをコピーすることについてこの質問に似た状況がありますが、私の場合、キャンバス エンジン自体に問題が発生していると思います。
オンスクリーン キャンバスと同じ幅と高さのオフスクリーン キャンバスを作成しています。
@offscreenCanvas = document.createElement('canvas')
# assign same dimensions as onscreen canvas
@offscreenCanvas.width = canvas.width
@offscreenCanvas.height = canvas.height
次に、オフスクリーン キャンバスからオンスクリーン キャンバスに次のように描画します。
# grab the width and height of the canvas
{ width, height } = @canvasElement
{ x, y } = offset
# copy image from layer into canvas
@context.drawImage
@offscreenContext.canvas, -x, -y, width, height, -x, -y, width, height
オフセットは、このすべての描画が行われる前に「ライブ」キャンバス コンテキストを変換する関数への引数でもあります。
@context.save()
@context.translate(@offset.x,@offset.y)
@renderer.draw(world, @offset)
@context.restore()
言い換えれば、オンスクリーン コンテキストの変換されたオフセットに対応するオフスクリーン コンテキストのセクションを取得しようとしています。
これにはいくつかの問題があります。オフセットによって「カメラ」が原点から遠くに移動すると、オフスクリーン キャンバスの「エッジ」に遭遇します。
画面上のキャンバスに対して同じレンダリング操作を行うと、要素は問題ないことに注意してください。
オフスクリーン キャンバスは、キャンバスと同じように「エッジ」からの描画を処理するのにあまり適していないようです (定義された領域外の描画コマンドを黙って無視します)。の上または左[0,0]
(または下または右)に行った描画を反映します[width,height]
。これに対応する方法はありますか?
私が試したこと:
- オフスクリーン キャンバスの幅と高さを調整します (残念ながら、これが座標に与える影響は予測が難しいようです)。