首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Java游戏小程序设置两个定时器

如何为Java游戏小程序设置两个定时器
EN

Stack Overflow用户
提问于 2013-06-22 06:01:29
回答 2查看 318关注 0票数 0

我需要两个定时器。一个用来运行游戏,比如移动对象,执行检查,另一个作为倒数计时器。我尝试了以下几点:

代码语言:javascript
复制
Timer countdownTimer = new Timer(1000,this);
Timer gameTimer = new Timer(30,this);

public void init()
{
   this.actionPerformed(this); //add action listener to content pane
}

@Override
public void actionPerformed(ActionEvent e) 
{
    if(e.getSource() == gameTimer)
    {
        // control the game
    }

    if(e.getSource() == countdownTimer)
    {
       //decremenet the timer
    }
}

但是,当我试图运行applet时,这会返回一个空指针异常。如何正确区分每个定时器和另一个计时器,并在每个计时器滴答时执行所需的操作。谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-06-22 06:18:12

我假设您使用的是javax.swing.Timer类?this.actionPerformed(this);似乎不正确,因为您的applet不是ActionEvent。此外,您应该在init()方法中启动定时器:

代码语言:javascript
复制
public class GameApplet extends Appel implements ActionListener
    public void init()
    {
        countdownTimer = new Timer(1000,this);
        gameTimer = new Timer(30,this);
        countdownTimer.start();
        gameTimer.start();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == gameTimer) {
            // control the game
        }

        if(e.getSource() == countdownTimer) {
           //decremenet the timer
        }
    }
}

检查同样重定向到计时器javadoc关于计时器的Java教程

票数 0
EN

Stack Overflow用户

发布于 2013-06-22 06:27:43

使用ScheduledExecutorService。它比计时器更有效率。若要查看其效果,请运行以下代码。

代码语言:javascript
复制
class GameControl {
    private final ScheduledExecutorService scheduler =
            Executors.newScheduledThreadPool(1);

    public void beepForGame() {
        final Runnable beeper = new Runnable() {
            @Override
            public void run() {
                System.out.println("Game");
            }
        };
        final ScheduledFuture<?> beeperHandle =
                scheduler.scheduleAtFixedRate(beeper, 30, 30, SECONDS);
        scheduler.schedule(new Runnable() {
            @Override
            public void run() {
                beeperHandle.cancel(true);
            }
        }, 60 * 60, SECONDS);
    }

    public void beepCountDown() {
        final Runnable beeper = new Runnable() {
            @Override
            public void run() {
                System.out.println("count down");
            }
        };
        final ScheduledFuture<?> beeperHandle =
                scheduler.scheduleAtFixedRate(beeper, 1, 1, SECONDS);
        scheduler.schedule(new Runnable() {
            @Override
            public void run() {
                beeperHandle.cancel(true);
            }
        }, 60 * 60, SECONDS);
    }
    public static void main(String[] args) {
        GameControl bc=new GameControl();
        bc.beepCountDown();
        bc.beepForGame();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17247821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档