gpt4 book ai didi

java - 在Java游戏中实现暂停/恢复功能

转载 作者:行者123 更新时间:2023-11-30 11:04:58 25 4
gpt4 key购买 nike

我已成功使用 *running = !running 暂停游戏

但是如果使用这个就无法取消暂停

并且 thread.resume()thread.wait() 也无法在按下“P”时取消暂停

private volatile boolean running;
private Thread thread;

public static enum STATE {
MENU,
GAME,
};

public static STATE State = STATE.MENU;

public void init(){
requestFocus();
}

private synchronized void start(){
if(running)
return;

running = true;
thread = new Thread(this);
thread.start();
}

private synchronized void stop(){
if(!running)
return;

running = false;
try{
thread.join();
}catch(InterruptedException e){
e.printStackTrace();
}
}

public void run() {
init();

while(running){
/some codes
}
stop();
}

private void render(){

if(State == STATE.GAME){
p.render(g);
c.render(g);

}else if(State == STATE.MENU){
menu.render(g);
}

g.dispose();
bs.show();
}

public void keyPressed(KeyEvent e){
int key = e.getKeyCode();

if(State == STATE.GAME){
if(key == KeyEvent.VK_RIGHT){
p.setVelX(5);
}else if(key == KeyEvent.VK_LEFT){
p.setVelX(-5);
}else if(key == KeyEvent.VK_DOWN){
p.setVelY(5);
}else if(key == KeyEvent.VK_UP){
p.setVelY(-5);
}else if(key == KeyEvent.VK_SPACE && !is_shooting){
c.addEntity(new Bullet(p.getX(), p.getY(), tex, this));
is_shooting = true;
}else if(key == KeyEvent.VK_P){

这一行是暂停。

        running = !running;
}
}
}

public void keyReleased(KeyEvent e){
int key = e.getKeyCode();

if(key == KeyEvent.VK_RIGHT){
p.setVelX(0);
}else if(key == KeyEvent.VK_LEFT){
p.setVelX(0);
}else if(key == KeyEvent.VK_DOWN){
p.setVelY(0);
}else if(key == KeyEvent.VK_UP){
p.setVelY(0);
}else if(key == KeyEvent.VK_SPACE){
is_shooting = false;
}else if(key == KeyEvent.VK_P){


// This line doesn't work.

running = true;
}
}

最佳答案

目前,一旦 running 设置为 false,您的游戏线程就会退出(run() 方法返回)。

public void run() {
init();
while(running){
/some codes
}
stop();
}

应该改成这样:

public void run() {
init();
while(true){
if(!running) {
Thread.sleep(1000); //1 second or something else
continue;
}
//Game logic here
}
stop();
}

您当然需要区分运行和暂停,以便能够跳出此循环。

关于java - 在Java游戏中实现暂停/恢复功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29822905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com