2012-11-26 16 views
0

我正在尝试将actionlistener链接到我正在写的游戏的计时器。每当定时器触发时,2D阵列中的怪物随机移动到一个相邻的瓷砖。阵列并不完全充满怪物。没有怪物的地方,我的数组有空。我该如何将actionlistener应用于我的计时器?

这是我到目前为止有:

private class MonsterListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     for (int i = 0; i < Level.SIZE; i++) { 
      for (int j = 0; j < Level.SIZE; j++) { 
       if (monsters[i][j] != null) { 
        monsters[i][j].update(); 
       } 
      } 
     } 
     updateState(); 
    } 
} 

我的怪物类中:

public void update() { 
     rand1 = new Random(); 
     rand2 = new Random(); 
     drow = rand1.nextInt(3); //random int 0,1,2 
     dcol = rand2.nextInt(3); //random int 0,1,2 
     drow -= 1; //random int -1,0,1 
     dcol -= 1; //random int -1,0,1 

     row += drow; 
     col += dcol; 
    } 

当我创建我的定时器,我这样做

public final int DELAY = 1000; 
Timer myTimer = new Timer(DELAY, new MonsterListener()); 

然而,我不断收到错误消息

cannot find symbol 
symbol : constructor Timer(int,Game.MonsterListener) 
location: class java.util.Timer 
    myTimer = new Timer(DELAY, listener); 
        ^

回答

2

我认为你需要使用的javax.swing.Timer代替java.util.Timer

[我怀疑这是因为您使用ActionListener]

+0

我相信你是对的!关于此问题的另一个问题。有没有什么办法从同一个项目的另一个类访问这个定时器?我希望我的GUI在每次这个计时器触发时都更新,但计时器不在面板类中我有更新GUI,所以在我的面板类中有什么方法可以说“当计时器触发时,执行此操作......“? – user1850008

+0

我不确定我是否完全了解您的项目组织。但是,如果要将计时器与面板的每个实例相关联,则可以在面板的构造函数中创建并设置计时器。 –

相关问题