如何只 drawString() 一次

How to drawString() only once

我有一个程序,用户在网格中移动并且必须杀死敌人。当他们这样做时,会出现一条消息,说明用户听到了尖叫声。

这条消息应该只在用户开火时显示一次。如果以下方法为真,我会显示消息:

 public boolean deadWumpus()
 {
     for(int x=0;x<10;x++)
     {
         for(int y=0;y<10;y++)
         {
             if(map.grid[x][y].getDeadWumpus()==true)
                 return true;
         }
     }
     return false;
 }

然后我的 paint() 方法中有一行说明如果此方法为真则显示消息。但是,这会继续显示,因为没有调节器告诉它 运行 仅在用户触发时显示一次。 我试图创建一个 int 以确保它只有 运行s 一次:

// at beginning of program 
int once=0;
//in paint()
    if(once==0){
    if(deadWumpus()==true)
    {
        g.drawString("You hear a scream.",300,675);

    }
    }
    once++;

使用它永远不会显示消息。有没有一种方法可以让消息只在用户射击时显示一次,然后在用户进行下一步操作时消失? 谢谢

每次在屏幕上绘制游戏帧时都会调用 paint() 方法。当你让它绘制 "only once," 时,你实际上是在绘制 "only once," ,因为只有一帧,因为帧更新得非常快,文本会闪烁,然后再也不会出现。我推荐这样的东西:

long userFired;

// 当用户触发时 -> userFired = System.currentTimeMillis();

paint() { /*the "2000" means that the text will display for 2 seconds*/
    if(System.currentTimeMillis()-userFired < 2000 && deadWumpus()==true) {
        g.drawString("You hear a scream.",300,675);
    }
}