2Dで視差スクロールを実装するにはどうすればよいですか?


回答:


20

各レイヤーの位置を、カメラからの「距離」で割ります。

たとえば、次のようにカメラの位置を表すための変数のカップルを作成し、cameraXそしてcameraY。これらをキャラクターの位置と等しくなるように設定し、おそらく移動方向にもう少し追加します。

メインレイヤーは

mainLayer.x = -cameraX;

中間層のようなもの

middleLayer.x = -cameraX * 0.5;

そして遠い層で

farLayer.x = -cameraX * 0.2;

必要に応じて定数を変更します。


3
Iainが言ったことに加えて、「視差係数」(Iainのコードでは1、0.5、0.2)を取り、レイヤーを記述するパラメーターにして、視差の微妙さ(または実行時)を調整できるようにします。
トロイギルバート

6

基本的に、オブジェクトを「カメラ」に近づけるほど速く移動させます。それをどのように実装するかはあなた次第です。

各レイヤーに深さを割り当て、シーンをスクロールするときに、レイヤーごとにそのスクロールをレイヤーの深さで分割します。これにより、遠くにあるレイヤーが遅くなります。


5

「さらに戻る」レイヤーは、フォアグラウンドレイヤーの数分の1の速度でスクロールする必要があります。速度が半分の場合、距離は2倍になります。霧などをシミュレートするための色付けのような他の効果も錯覚に追加する可能性があります。


1

これを行う最善の方法は、スプライトを3Dでビルボード表示されたクワッドとして単純にレンダリングすることです。「ゲームプレイ」はすべて1つの平面で発生しますが、背景と前景は3D空間により近くまたはより遠くに配置できます。そうすれば、特別なコーディングをしなくても視差効果が処理されます:-)


3
それを行う場合は、距離のスケーリングを補正するために遠方のクワッドを拡大するか、遠近感を適用しない投影マトリックスを設定する必要があります。クワッドを自分で翻訳する方が簡単かもしれません。
10

0

位置から減算することにより最下層をスクロールさせ、通常どおり中間層を描画し、最下層を2で割った速度で最上層をスクロールさせます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.