1

ゲームを書いたので、カメラの操作方法を学びたいと思います。

私の絵はこれで構成されています:

private void render()
{
    // CREATE THE GRAPHICS
    Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics();
    // MAKE THE PICTURE WHERE WE WILL PAINT EVERYTHING AT ONCE
    g.clearRect(0, 0, WIDTH, HEIGHT);
    // PAINT ANYTHING WE NEED HERE
    render(g);
    g.dispose();
    // SHOW THE WHOLE IMAGE RATHER THAN PAININT ONE OBJECT AT A TIME
    bufferStrategy.show();
}

私の BufferStrategy は次のように作成されます:

    canvas = new Canvas();
    // once again I add 1 because java is stupid that's why
    canvas.setBounds(0, 0, WIDTH+1, HEIGHT+1);
    //canvas.setBounds(bounds);
    canvas.setIgnoreRepaint(true);

    // SET GRAPHICS DEVICE
    canvas.createBufferStrategy(2);
    bufferStrategy = canvas.getBufferStrategy();

レンダリング関数では、ゲームの世界を、すべてのプラットフォームがあるべき場所に描画します。ゲームの世界がウィンドウ サイズよりも大きく、キャラクターに集中して、キャラクターがいる世界の一部を描画できるようにしたい場合、どうすればよいでしょうか? ウィンドウが 300 x 300 で、ゲーム ワールドが 900 x 900 で、キャラクターが中央にあるとします。そのため、x が 150、y が 150、幅が 150 のグラフィックスの部分を表示したいとします。高さは 300 x 300 です。

では、その Graphics2D を取得して、指定された値だけシフトするにはどうすればよいでしょうか? この質問が回答されているか簡単な場合は申し訳ありませんが、私はこれに慣れていないため、本当に助けが必要です.

事前に助けてくれてありがとう。私が知っていることはすべて試しましたが、役に立ちませんでした。

4

2 に答える 2

2

では、その Graphics2D を取得して、指定された値だけシフトするにはどうすればよいでしょうか?

Graphics2D をシフトする必要があるのはなぜですか? ビューポートを超えて広がる画像を作成し、単にビューポートをシフトしてみませんか。次に、ユーザーがビューポートの端に近づいたら、前縁に画像を追加し、後縁の一部を切り取ります。

于 2013-05-24T03:00:55.807 に答える
1

これがアフィン変換の目的です。

http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/geom/AffineTransform.html

シフトを適用して、文字を画面の中央に移動します。

ペイント コンポーネントで、現在の変換を保存します。画面を希望する場所に移動する新しい変換を作成します。新しい変換を使用するように Graphics2D を設定します。元の座標でキャラクターを描画 元の変換を使用するように Graphics2D を設定します。

于 2013-05-24T04:15:07.227 に答える