我正在制作一个简单的乒乓球游戏; 碰撞机制的一部分需要获取画布的宽度和高度以重新定向球。然而,getWidth()
和getHeight()
出现了返回0的情况。以下是主要的代码块。
package pong;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JPanel {
static int gameSpeed = 10;
Ball ball = new Ball(this);
private void move() {
ball.move();
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
ball.paint(g2d);
}
public static void main(String args[]) throws InterruptedException {
JFrame frame = new JFrame("Pong");
Main game = new Main();
frame.add(game);
frame.setSize(400, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
while (true) {
game.move();
game.repaint();
Thread.sleep(gameSpeed);
}
}
}
以下是实际的Ball
类,处理移动条件。
package pong;
import javax.swing.*;
import java.awt.*;
public class Ball extends JPanel {
int x = 1;
int y = 1;
int dx = 1;
int dy = 1;
private Main game;
public Ball(Main game) {
this.game = game;
}
void move() {
System.out.println(getWidth() + getHeight());
if (x + dx < 0) {
dx = 1;
}
if (y + dy < 0) {
dy = 1;
}
if (x + dx > (getWidth() - 30)) {
dx = -1;
}
if (y + dy > (getHeight() - 30)) {
dy = -1;
}
x = x + dx;
y = y + dy;
}
public void paint(Graphics2D g) {
g.fillOval(x, y, 30, 30);
}
}
编辑:问题已解决,我只是没有告诉getWidth()和getHeight()要参考什么。显然,如果我不告诉它们要获取什么,它们就会返回null。更正错误的方法很简单,只需将它们更改为game.getWidth()和game.getHeight()。尽管如此,感谢您的帮助!您所有的输入也对其他领域有所帮助 :)
getPreferredSize()
,请阅读链接中指定的内容以获取更多帮助 :-) - nIcE cOw