Я делаю простую игру в понг; и часть механики столкновения требует получения ширины и высоты холста, чтобы перенаправить мяч. Однако 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()
прочитайте указанную в нем ссылку для получения дополнительной помощи :-) - person nIcE cOw   schedule 06.02.2014