我使用BufferedImage
來獲得流暢的圖形(即沒有閃爍)。然而,中間畫的正方形非常閃爍,有時實際上看不見。我不知道什麼是錯,這種方法對我的其他遊戲運行良好。即使使用BufferedImage也是真正的閃爍圖形
這裏是我的代碼(廣場是由我定義的類型):
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);
}
}
1)爲什麼要編寫一個小程序?如果由於規格而到期。由老師,請參考[爲什麼CS老師應該停止教Java applets](http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should-stop-teaching-java-applets/)。 2)爲什麼選擇AWT而不是Swing?在[Swing extras over AWT]上看到這個答案(http://stackoverflow.com/a/6255978/418556)有很多很好的理由放棄使用AWT組件。如果您需要支持較老的基於AWT的API,請參閱[混合重量級和輕量級組件](http://www.oracle.com/technetwork/articles/java/mixing-components-433992.html)。 –
@AndrewThompson我喜歡小程序。我是一個熱心者,而不是專業人士。 – imulsion
好吧,你去..我想在那個世界上必須有*人*享受痛苦。 ;) –