Java:暂停功能无法实现
我是Java的新手,我正在尝试创建一个类似乒乓球的游戏。我创建了一个暂停功能,当玩家按下空格键时,它会停止游戏运行。我一直在想到底该怎么做。现在,当我击中空间时,球停止了,但当我取消暂停时,球变得比以前快得多。我也很确定这种方法是行不通的。任何关于如何做到这一点的帮助都将不胜感激 这是我的图形课Java:暂停功能无法实现,java,graphics,Java,Graphics,我是Java的新手,我正在尝试创建一个类似乒乓球的游戏。我创建了一个暂停功能,当玩家按下空格键时,它会停止游戏运行。我一直在想到底该怎么做。现在,当我击中空间时,球停止了,但当我取消暂停时,球变得比以前快得多。我也很确定这种方法是行不通的。任何关于如何做到这一点的帮助都将不胜感激 这是我的图形课 public class GraphicRender extends JPanel implements ActionListener { //Object for Random Ra
public class GraphicRender extends JPanel implements ActionListener {
//Object for Random
Random random = new Random();
//Timer on 5ms clock
Timer timer = new Timer(5, this);
//Variables for the coordinates of the player and enemy
public static int paddleLX = 12, paddleLY = 400, paddleLW = 5, paddleLH = 70, paddleLXV, paddleLYV;
public static int ballX = 400, ballY = 400, ballXV, ballYV;
public static boolean gamePaused = false;
//Constructor to initialise objects
public GraphicRender() {
timer.start();
this.setFocusable(true);
this.requestFocusInWindow(true);
//Adds the keyListener
addKeyListener(new GetKeyStroke());
}
//Graphic rendering
public void paintComponent(Graphics g) {
super.paintComponent(g);
this.setBackground(Color.BLACK);
draw(g);
}
public void draw(Graphics g) {
g.setColor(Color.GRAY);
//Walls
g.fillRect(0, 1, 8, 800);
g.fillRect(0, 1, 800, 8);
g.fillRect(0, 755, 800, 8);
g.fillRect(777, 1, 8, 800);
//Ball
g.setColor(Color.WHITE);
g.fillRect(ballX, ballY, 5, 5);
//Left Paddle
g.fillRect(paddleLX, paddleLY, paddleLW, paddleLH);
}
public void startBall() {
ballXV = -1;
ballX += ballXV;
ballY += ballYV;
repaint();
}
public void startGame() {
gamePaused = false;
startBall();
}
public static void pauseGame() {
gamePaused = true;
}
public void actionPerformed(ActionEvent e) {
if(!gamePaused)
startGame();
if(gamePaused)
pauseGame();
}
}
这里是键绑定类
package game.util;
import game.render.GraphicRender;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class GetKeyStroke extends KeyAdapter{
public void keyPressed(KeyEvent e) {
GraphicRender gRndObj = new GraphicRender();
if(e.getKeyCode() == KeyEvent.VK_SPACE) {
if(!GraphicRender.gamePaused) {
System.out.println("Game is not paused");
GraphicRender.pauseGame();
}else{
System.out.println("Game is paused");
gRndObj.startGame();
}
}
}
}
我知道这个代码非常混乱,所以对此表示抱歉
gamePaused()
方法不应是静态的。将其设置为实例变量stop()
,在Timer对象上调用restart方法start()
要将一个类的引用传递给另一个类,只需使用构造函数参数之类的参数。比如说,
class MyBar {
private MyFoo myFoo;
public MyBar(MyFoo myFoo) {
this.myFoo = myFoo;
}
public void someMethod() {
if (!myFoo.isBazz()) {
myFoo.setBazz(true);
} else {
myFoo.startBazzer();
}
}
}
谢谢你的意见,真的很有帮助!就像我说的,我对Java非常陌生,所以你能告诉我如何通过构造函数传入GraphicRender类,并在按键方法中使用它吗?只是把我的代码弄乱了,现在完全可以工作了。非常感谢你的帮助。