2

私は基本的に単純なゲームエンジンをプログラミングしていますが、スプライト/画像が表示されるべきときに表示されないという問題があります...またはまったく表示されません!

これをできるだけシンプルにしようと思います。Sprite、GameEngine、および Display クラスがあります。ゲームループには、スプライトの新しい位置を設定するメソッドがあります (つまり、x 変数と y 変数を設定するだけです)。次に、次の処理を行う変換メソッドを呼び出します。

public void transform() {
    affineTransform.setToIdentity();
    affineTransform.translate(x, y);
}

その後、Sprite で draw メソッドを呼び出します。

public void draw() {
    graphics2D.drawImage(image, affineTransform, jFrame);
}

最後に、スレッドで、JFrame (Display クラス) で repaint() を呼び出します。そのクラスの私のペイント方法は次のとおりです。

public void paint(Graphics g) {
    g.drawImage(backbuffer, insets.left, insets.top, this);
}

しかし、黒い画面以外は何も表示されません!

また、Graphics g と Graphics2D の間で混乱し、どちらを使用するかについても混乱しています。(オーバーライドされたペイント メソッドは Graphics g を使用します)。記録として、backbuffer.createGraphics(); を呼び出すことによって作成されるクラスに Graphics2D 変数があります。

私を混乱させているもう1つのことは、このAffineTransformです...ドキュメントを読みましたが、それをいつどのように使用するか、そしてそれが正確に何をしているように見えるかについて、まだ完全に混乱しています。比較的簡単な言葉で説明はありますか?

確かにこれは機能するはずです...ここで何か不足していますか?

4

1 に答える 1

2
  1. 質問の一部に答えるには:

    Graphics2D JavaDoc から この Graphics2D クラスは Graphics クラスを拡張して、ジオメトリ、座標変換、カラー マネージメント、およびテキスト レイアウトをより高度に制御できるようにします。これは、Java(tm) プラットフォームで 2 次元の形状、テキスト、および画像をレンダリングするための基本的なクラスです。

    基本的に、 を使用すると、Graphics2Dを使用するよりもはるかに多くのことができますGraphics。また、Sun JVM 1.5 以降では、取得しオブジェクトを安全にキャストできるはずです。Graphicspaint()Graphics2D

  2. これに気付きました:記録として、 backbuffer.createGraphics(); を呼び出すことによって作成されるクラスに Graphics2D 変数があります。

    Graphics[2D] 後で破棄するキャンバスGraphics[2D](オブジェクトが提供する描画可能領域を指すためにこの用語を使用します) に描画していないことを確認する必要があります。別のキャンバスに画像を描画している場合は、その画像を実際の表示キャンバスに描画する必要があります。

  3. うまく説明できませんが、AffineTransform参考になるでしょうか?

于 2011-03-06T16:11:48.777 に答える