おそらく、クラスのtranslate(x, y)
メソッドを探しているでしょう。Graphics
このメソッドは、標準の Java Swing/AWTGraphics
クラスと Slick2D バージョンの両方から利用できるため、これは Slick2D 固有の機能ではないことに注意してください。
translate が行うことは、今後のすべての描画操作の原点を移動することです。これは何を意味するのでしょうか?通常、原点は (0, 0) にあることに注意してください。そのため、位置 (40, 50) にポイントを描画すると、画面の位置 (40, 50) に描画されます。ただし、translate()
この基準点を移動すると、他のすべての描画操作に影響します。
たとえば、 を実行translate(50, 60)
すると、原点が x 軸で右に 50 ピクセル移動し、y 軸で 60 ピクセル下に移動します (コンピューター プログラマーでは、y の値が大きいほど画面の下に表示されるため)。次に、(40, 50) にポイントを描画すると、実際には画面の (40 + 50, 50 + 60) または (90, 110) に描画されます。これが使う力ですtranslate()
。
通常は、描画が終わったら原点を (0, 0) に戻すことをお勧めします。そうしないと、問題が発生する可能性があります。ただし、実行してtranslate(0, 0)
もこのタスクは達成されず、実際にはまったく何もしません。これは、translate メソッドが原点を相対点に移動するためです。代わりに、すべての呼び出しtranslate(x, y)
に対して、別の呼び出しがあることを確認してくださいtranslate(-x, -y)
。これにより、原点が手に負えなくなります。
この方法を使用してカメラをエンティティの 1 つに追従させたい場合は、そのエンティティの位置のネガを使用して原点を変換する必要があることに注意してください。たとえば、位置ベクトル 'pos' を使用してプレーヤーを追跡するには、次のようにします。
g.translate(-player.pos.x, -player.pos.y);
// Render everything
g.translate(player.pos.x, player.pos.y);
これは、プレイヤーが右に移動したときに背景を左に移動させたいためです。そうしないと、すべてがプレイヤーに追従してしまいます。