Итак, у меня есть метод gameOver(), который должен, когда овал выходит за рамки прерывания игры, но как только я запустил игру, он запускает метод gameOver. Я смотрел на него некоторое время, пытаясь разобраться в разных вещах. Я думаю, что то, что выделялось для меня, - это удаление последовательности прерываний, в которой игра выполняется в основном, как следует, всплывающее окно закрывается и что если я заменю game.gameOver(); с ya = -1 мяч отскакивает от стены.метод запускается при запуске
gaveOver()
public void gameOver(){
JOptionPane.showMessageDialog(this, "Game Over", "Game Over", JOptionPane.YES_NO_OPTION);
System.exit(ABORT);
}
движение()
package com.edu4java.minitennis1;
import java.awt.Graphics2D;
import java.awt.Rectangle;
public class Ball {
private static final int DIAMETER = 30;
int x = 0;
int y = 0;
int xa = 1; // Represent the speed in which the ball is moving
int ya = 1; // Represent the speed in which the ball is moving
private Game game;
public Ball(Game game){
this.game=game;
}
/*
* If xa=1, the ball moves to the right, one pixel every round of the Game Loop,
* if xa=-1, the ball moves to the left.
* If ya=1 moves the ball down and
* If ya=-1 moves the ball up.
*/
void move(){
if (x + xa < 0) // Makes left bounds
xa = 3; // Moves the ball right
if (x + xa > game.getWidth() - DIAMETER) // Makes right bounds
xa = -3; // Moves the ball left
if(y + ya < 0) // Makes top bounds
ya = 3; // Moves ball down
if(y + ya > game.getHeight() - DIAMETER) // Makes bottom bounds
game.gameOver();
if (collision()){ // Makes collision with Racquet
ya = -3;
y = game.racquet.getTopY() - DIAMETER;
}
x = x + xa;
y = y + ya;
}
private boolean collision(){
return game.racquet.getBounds().intersects(getBoundsBall());
}
public void paint(Graphics2D g){
g.fillOval(x, y, DIAMETER, DIAMETER);
}
public Rectangle getBoundsBall(){
return new Rectangle(x, y, DIAMETER, DIAMETER);
}
}
была решена, я просто вернулся и переписал метод перемещения() и заменить его
void move(){
if(x + xa < 0)// Makes left bounds
xa = 1;// Moves the ball right
if(x + xa == game.getWidth() - DIAMETER)// Makes right bounds
xa = -1;// Moves the ball left
if (y + ya < 0)// Makes top bounds
ya = 1;// Moves ball down
if(y + ya == game.getHeight() - DIAMETER){ // Makes bottom bounds
ya = 0;// Moves ball up
xa = 0;
game.gameOver();
}
Проблемы
Иногда все, что вам нужно сделать, это вернуться.
где код, который вызывает функцию gameOver()? – CPerkins
Невозможно увидеть здесь функцию gameOver(). – gashu
'if (y + ya> game.getHeight() - DIAMETER) game.gameOver();' для тех, кто смотрел. Не так сложно найти –