延迟重画

时间:2013-10-08 05:22:05

标签: java awt paint keylistener repaint

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer;

public class Spelare extends Applet implements KeyListener{

public int x = 240; 
public int y = 450;
public boolean skott = false; 

}

public void init() {
    setBackground(Color.BLACK);
    setSize(500, 500);
    addKeyListener(this);
}

public void paint(Graphics g)  {

    g.setColor(Color.WHITE);
    g.fillRect(x, 450, 20, 15);

    if (skott == true) {
    g.setColor(Color.WHITE);
    g.fillRect (x, y, 3, 6);
    y-=1; 
    repaint();
    }
}


public void keyPressed(KeyEvent e) {
     if (e.getKeyCode() == KeyEvent.VK_RIGHT ) {
         if(x<470){
             x+=4;
             repaint();
         }
     }

     else if (e.getKeyCode() == KeyEvent.VK_LEFT ) {
    if (x>10) {
         x-=4;
         repaint();
     }
     }
     if (e.getKeyCode() == KeyEvent.VK_SPACE ) {
         skott = true; 

     }
     }

这是我第一次使用Stack Overflow。

我想知道如何将y变量重新绘制为延迟。因为当我按空格时,skott变量变为真,并且它重新绘制得如此之快,矩形在屏幕上大约持续一帧。我对Java很新,所以我不完全确定我正在做的一切。

我在想也许我可以使用计时器进行重新绘制睡眠。但我不知道应该如何处理它。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您想让线程进入休眠状态,只需在Thread.sleep(n)调用之前添加n,其中repaint()是您想要睡眠的数量(以毫秒为单位)。但请注意,这具有重大意义。由于这(大概)是在你的主线程上完成的,它实际上会停止那些n毫秒的applet。