[英]Delay between two lines of code - Graphics
我正在嘗試制作西蒙游戲 。 我在編寫游戲程序時處於中途,但遇到了問題。 我希望程序從QUEUE中讀取游戲中先前存在的所有值,並以正確的順序閃爍其顏色(我選擇將它們變為灰色,然后在第二秒后恢復正常),這就是我的問題。 如果您看一下play()
方法,您會看到我在那寫的評論。 我怎么做?
這是我的代碼:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Arc2D;
import java.util.Date;
import javax.swing.JPanel;
import javax.swing.Timer;
import unit4.collectionsLib.Queue;
public class window extends JPanel implements MouseListener , ActionListener{
Queue <Integer>data = new Queue<Integer> ();
Queue <Integer>temp = new Queue<Integer> ();
int random;
Timer prestart;
int prestartcount;
Color [] colors = {Color.red,Color.blue,Color.yellow,Color.green};
public window (){
prestart = new Timer (1000,this);
int prestartcount=0;
prestart.start();
}
public void play (){
random = (int)(Math.random()*4);
data.insert(random);
int x=0;
Color temp=Color.black;
x = data.remove();
this.temp.insert(x);
temp = colors[x];
colors[x]=Color.gray;
// delay of one second here
colors[x]=temp;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(colors[0]);
g.fillArc(80, 150, 250, 250, 0, 360);
g.setColor(colors[1]);
g.fillArc(80, 150, 250, 250, 0, 270);
g.setColor(colors[2]);
g.fillArc(80, 150, 250, 250, 0, 180);
g.setColor(colors[3]);
g.fillArc(80, 150, 250, 250, 0, 90);
g.drawString(prestartcount+"", 0, 30);
repaint();
}
@Override
public void mouseClicked(MouseEvent arg0) {
arg0.getLocationOnScreen();
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
@Override
public void actionPerformed(ActionEvent act) {
if (act.getSource()==prestart){
if (prestartcount<3)
prestartcount++;
else{
prestart.stop();
play();
}
}
}
}
使用基於Swing的單拍Timer
翻轉顏色並調用repaint()
。 有關詳細信息,請參見在Swing應用程序中使用計時器 。
colors[x]=Color.gray;
// delay of one second here
timer = new Timer(0, new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
colors[x]=temp;
repaint(); //repaint the gui, or you want see the effect
}
});
timer.setInitialDelay(1000); //wait one second
timer.setRepeats(false); //only once
timer.start();
您可能必須將溫度設置為最終溫度,或將其存儲在其他位置。
嘗試使用Thread.sleep() 。
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds. The thread does not lose ownership of any monitors.
您需要Thread.sleep(1000)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.