もっと明瞭にするために、私の質問を編集しました。HTML 5のキャンバスに静的な背景を描画する
私は自分のゲームの背景を構築しています。私は、自分のゲームが2Dであることを除いて、FPSゲームのようなプレーヤオブジェクト以外の背景の上に描画するオブジェクトの同じ相対位置にとどまります。私はこれが何千回も行われたと確信していますが、解決策を見つける場所がわかりません。
私のゲームは、常にキャラクターを画面の中央に合わせ、他のオブジェクトをバックグラウンドの他の部分に描画するように設計されています。
私の背景が、以下に説明するように9フレームのサイズと同じ大きさであると仮定すると、1フレームはブラウザ画面の正確なサイズです。
私のキャラクターはフレーム9にフレーム1から行く場合は今、私の性格はいつも私の性格ので程度(frame.width/2、frame.height/2)である、中心部に滞在しますなんらかの形をしています。したがって、画面にはフレーム '1'の代わりにフレーム '9'が表示されます。移動中に、私のキャラクターから他のオブジェクトが「遠ざかる」のを見ることができます。
が、私は私の背景を描画するマップクラスを使用し、そのrender()
方法は、このようなものです:
var drawBackground = function (callback) {
callback(this);
}
image.onload = drawBackground(() => {
var pattern = this.ctx.createPattern(image, 'repeat');
this.ctx.fillStyle = pattern;
this.ctx.fillRect(0, 0, this.paintWidth, this.paintHeight);
// this.ctx.drawImage(image, 0, 0, 10000, 10000);
});
image.src = require('../media/bg.jpg');
は今、私のコードに問題があります。私の背景(地図)図面は常にキャラクターの周りにスクリーンを再描画するので、私が見ている効果はキャラクターと一緒に動いているようなものですが、それ以外はすべて同じ場所にとどまります。これは自然に見えません。私はバックグラウンドと他のすべてのオブジェクトが同じ場所にとどまりたい。彼らは私のキャラクターと一緒に動かない。これどうやってするの?
アニメーションを表示するためにanimate()関数を使用します。
function animate() {
map.clear(); // clearRect
... Some code to track my character...
map.render();
character.render();
requestAnimationFrame(animate);
}
animiate();
EDIT:
一部の人々は、私は2つのキャンバスを使用することをお勧め。私は実際に2つのキャンバスを使用しています。
これはindex.html
ファイルの私の設定です:
<canvas id="background" style="z-index: 1;">You are viewing the Game Background Canvas -- Update your browser!</canvas>
<canvas id="canvas" style="z-index: 2;">...</canvas>
彼らは次のようにCSSスタイルがあります。
#canvas, #background {position: absolute;left: 0px; top: 0px;}
をそして、私の背景が '背景' キャンバスを使用して、私の文字が 'キャンバス' を使用しますが、私の他のオブジェクトも '背景'のキャンバスを使用し、彼らは私のキャラクターと一緒に動かず、背景だけがキャラクターと一緒に動きます。
質問はあまりにも広すぎて閉じてはいけませんが、助けなくてはいけません。最短の記述では、あなたのためにCameraを扱うものを作る必要があります。オブジェクトを描画し、オフセットしたいすべてのオブジェクトの描画位置に適切なオフセットを適用する必要があります。あなたがそれを持っているなら、そのカメラオブジェクトを移動してください(うまくいけば、動きがオフセットに影響を及ぼすようになります)、動きのある効果を作り出します。次に、カメラを相対的に移動させる機能を作ります。プレーヤー。 – Green
@Greenはい私は現在のコードに基づいてより多くの情報を見つけました。私は適切な言葉に絞り込むことができると思います。別の質問を作成するか、この質問を変更して回答しやすくする必要がありますか? – newguy
@newguy。 2番目の質問を投稿する必要はなく、現在の質問を編集するだけです。 ;-) – markE