【问题标题】:Updating a game x times per second in Java在 Java 中每秒更新游戏 x 次
【发布时间】:2012-08-07 15:08:25
【问题描述】:

我对游戏编程有点陌生,我决定用 Java 做一个小实验。我正在使用 Swing/AWT api 通过在 JPanel 上绘图来实现游戏。但是,我不确定如何在游戏中实现“打发时间”。有人对此有任何想法吗?

谢谢!

【问题讨论】:

    标签: java swing time updating


    【解决方案1】:

    您要查找的内容称为游戏循环。有很多关于此的文档。这是一个简单的:

    private boolean isRunning;
    
    public void gameLoop()
    {
        while(isRunning) //the loop
        {
            doGameUpdates();
            render();
            Thread.sleep(1000); //the timing mechanism
        }
    }
    

    这个想法是,while 循环中的代码会一遍又一遍地执行,并且在执行之间会休眠 1 秒。这是实现“时间流逝”的一种方式。例如,如果您有一个具有 X 位置的对象,并且在 while 循环中放置了object.X += 1,则该对象的 X 位置将在循环的每次迭代中前进 1,即每秒 1。

    这是一个非常基本的游戏循环,它有一些问题,但如果你是初学者,它会做。一旦您变得更有经验,请查找可变和固定时间步长的游戏循环。

    但是,您必须在单独的线程中运行此代码,才能真正更新显示。

    【讨论】:

    • 我认为睡眠时间在milliseconds,所以你必须引入1000而不是1
    • 如果你使用 swing 这个想法一点都不好,Thread.sleep 也使用毫秒而不是秒。
    • 如果您在 Event Dispatch Thread 上执行此操作,则不会重新绘制任何内容,并且您的整个 UI 会冻结
    • @Robin 谢谢,添加注释以反映您的评论
    • 这可以通过使用重复的 java.swingx.Timer 来完成吗?
    【解决方案2】:

    也许你应该看看 Java 中的 threadshttp://www.javaworld.com/jw-04-1996/jw-04-threads.html 创建一个专门用于重新绘制和处理游戏循环的新线程(参见其他答案)。

    编辑:本教程可能有用:http://zetcode.com/tutorials/javagamestutorial/

    【讨论】:

    • 关于编辑,能否请参考具体教程
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多