在Java中执行之前进行单个if语句等待?

时间:2011-10-02 04:23:53

标签: java swing animation

我正在尝试让Java等待1秒钟,然后再评估if语句,看它是否应该更改布尔值。

我设置了如果Rectangle r与Rectangle y相交,则布尔“Intersect”变为true并且r向后移动。 1秒后,我想要一个if语句来检查r是否仍然与y相交。如果不是,“相交”再次变为假,r停止向后移动。我怎样才能做到这一点?这些语句在同一个线程中,并且涉及到动画,因此Thread.sleep()无效,因为它使动画非常跳跃。

以下是与问题相关的代码片段:

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class Game extends JFrame {

boolean p1Intersect=false;

private class Move1 extends Thread {
    public void run() {

if((p1horizontal.intersects(grass1)&&(hleft==true||hright==true)&&p1Intersect!=true) {  //Normal speed
        p1Speed = 5;
    }
if(p1horizontal.intersects(edge2)&&hleft==true) { //moves backwards after collision as long as p1Intersect = true
        p1Speed=-4;
        p1Intersect=true;
    }
if((p1horizontal.intersects(edge2)&&hleft==true)==false) { //This is the statement that I would like to wait for 1 second before executing
p1Intersect=false;
    }

2 个答案:

答案 0 :(得分:2)

原则上,您要做的是设置一个计时器,它会在检测到第一个事件后触发一秒钟。如果,当该事件触发时,检查您的矩形是否仍然相交。如果是这样,请采取您需要的任何行动。

正如您所注意到的,Thread.sleep()将停止执行整个线程,其他任何事情都不会发生。这也会让你的动画变得蠢蠢欲动。

答案 1 :(得分:1)

在游戏设计中,尝试在主线程中保留逻辑(也就是说,我会避免使用计时器)。我建议采用以下解决方案:

检测到交叉点时,将系统时间存储在很长时间内, 使用long intersectTime = System.currentTimeMillis()

现在,在第二个if语句中,只需检查额外条件 System.currentTimeMillis()-intersectTime>1000 因为1000毫秒= 1秒。