1

私はBufferedImage滑らかなグラフィックス (つまり、ちらつきなし) のために を使用しています。ただ、真ん中に描かれている四角はちらつきが激しく、実際には見えないこともあります。何が悪いのかわかりませんが、この方法は私の他のゲームではうまくいきました。

これが私のコードです(Squareは私が定義したタイプです):

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import java.applet.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;

public class DodgeArrows extends Applet implements KeyListener,Runnable{
    BufferedImage backbuffer;
    Thread gameloop;
    Square player;
    Random r = new Random();
    Graphics2D g2d;
    AffineTransform trans = new AffineTransform();
    public void init()
    {
        backbuffer = new BufferedImage(640,480,BufferedImage.TYPE_INT_RGB);
        g2d = backbuffer.createGraphics();
        player = new Square();
        player.setX(320);
        player.setY(480);
    }
    public void start()
    {
        gameloop = new Thread(this);
        gameloop.start();
    }
    public void run()
    {
        Thread t = Thread.currentThread();
        while(t==gameloop)
        {
            try
            {
                Thread.sleep(20);
            }
            catch(InterruptedException e)
            {
                e.printStackTrace();
            }
            repaint();
        }
    }
    public void stop()
    {
        gameloop = null;
    }
    public void update(Graphics g)
    {
        g2d = (Graphics2D)g;
        g2d.setColor(Color.BLACK);
        g2d.fillRect(0,0,getSize().width,getSize().height);
        g2d.setColor(player.getColor());
        g2d.fill(player.getShape());
        paint(g);
    }
    public void keyTyped(KeyEvent e){}
    public void keyPressed(KeyEvent e)
    {
        //irrelevant keylistener code 
    }
    public void keyReleased(KeyEvent e){}

    public void paint(Graphics g)
    {
        g.drawImage(backbuffer,0,0,this);
    }

}
4

1 に答える 1

2

g2d = (Graphics2D)g;update(...) メソッドから行を削除すると、すべての問題が解消されます。

の行ですでにバックバッファを作成していますg2d = backbuffer.createGraphics();。に割り当てるgg2d、両方が同じ Graphics オブジェクトを参照し、バッファを破棄します。画面への直接描画に戻ります。

于 2013-06-28T18:15:25.580 に答える