3

Java でゲームを作成しており、ゲームボードにユニットをペイントする必要があります。すべてのユニットをリストに入れ、そのリスト内のすべてのユニットをペイントします。ペイント方法は次のようになります。

  public void paint(Graphics g) {
        super.paint(g);

        if (unitList != null) {
            Collections.sort(unitList);
            for (Unit unit : unitList) {
                Image image = unit.getImage();
                g.drawImage(
                        image,
                        (int) (playPosition.x + unit.getPosition().getX() - image
                                .getWidth(null) / 2), (int) (playPosition.y
                                + unit.getPosition().getY() - image
                                .getHeight(null) / 2), null);
            }
        }
    }

BufferStrategy を作成しようとしましたが、問題を悪化させるだけです。何か間違ったことをしていると思います。

ありがとう

4

1 に答える 1

0

BufferStrategy正しく実装できていない可能性があります。
でオフスクリーン ペイントを実行して手動のダブル バッファリングを試してから、通常のオーバーライドされたメソッドImageで上記のイメージ全体をペイントします。paint()

あなたはそれを次のようにします:

// Double buffering objects.
Image doubleBufferImage;
Graphics doubleBufferGraphics;

/*
 * Onscreen rendering.
 */
 @Override
 public void paint(Graphics g) {
     doubleBufferImage = createImage(getWidth(), getHeight());
     doubleBufferGraphics = doubleBufferImage.getGraphics();
     paintStuff(doubleBufferGraphics);
     g.drawImage(doubleBufferImage, 0, 0, this);
 }

/*
 * Offscreen rendering.
 */
 public void paintStuff(Graphics g) {
     if (unitList != null) {
        Collections.sort(unitList);
        for (Unit unit : unitList) {
            Image image = unit.getImage();
            g.drawImage(
                    image,
                    (int) (playPosition.x + unit.getPosition().getX() - image
                            .getWidth(null) / 2), (int) (playPosition.y
                            + unit.getPosition().getY() - image
                            .getHeight(null) / 2), null);
        }
    }
 }
于 2012-12-16T12:15:03.527 に答える