[英]Java: Stuck making a pause function
我是Java的新手,并且正在尝试创建类似pong的游戏。 我创建了一个暂停功能,当玩家按下空格键时,该功能可以阻止游戏运行。 我非常坚持到底该怎么做。 现在,当我击中太空时,球停了下来,但是当我暂停时,球变得比以前快得多。 我也很确定这种方式是行不通的。 任何有关如何执行此操作的帮助将不胜感激。
这是我的图形课
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对象上有我的重启方法调用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();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.