【问题标题】:Pause game thread while separate JFrame is open在单独的 JFrame 打开时暂停游戏线程
【发布时间】:2014-07-03 02:23:35
【问题描述】:

我正在用 java 制作游戏,我正在尝试制作我的暂停菜单。目前我正在检查 esc 按钮是否被按下并运行我的菜单 JFrame。问题是我的游戏一直在后台运行。菜单打开时如何暂停游戏线程?

主游戏循环代码

public void run() {
    try {
        init();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    long lastTime = System.nanoTime();
    final double amountOfTicks = 60D;
    double ns = 1000000000/amountOfTicks;
    double delta = 0;

    while(running){
        long now = System.nanoTime();
        delta +=(now - lastTime)/ns;
        lastTime = now;
        if (delta >= 1) {
            tick();
            delta--;
        }
        render();
    }
    stop();
}

检查暂停菜单的代码

public void tick() {

    if (up) {

        playerUp = true;
        playerDown = false;
        playerLeft = false;
        playerRight = false;
        y -= SPEED;
        moving = true;
    }
    if (dn) {
        playerDown = true;
        playerLeft = false;
        playerRight = false;
        playerUp = false;
        y += SPEED;
        moving = true;
    }
    if (lt) {

        playerLeft = true;
        playerRight = false;
        playerDown = false;
        playerUp = false;
        x -= SPEED;
        moving = true;
    }
    if (rt) {
        playerRight = true;
        playerLeft = false;
        playerUp = false;
        playerDown = false;
        x += SPEED;
        moving = true;
    }


    if (esc) {
        pauseMenu.main(null);
    }

【问题讨论】:

标签: java multithreading jframe sleep


【解决方案1】:

几个提示:

tick() 是您运行游戏代码的位置,但它不应该决定何时打勾 - 因为如果它被暂停,它如何自行取消暂停?

您已经限制了拨打tick() 的次数。本质上,您希望在游戏“暂停”时进一步限制它。

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多