2014-11-24 2 views
0

Итак, у меня есть метод 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(); 
    } 
Проблемы

Иногда все, что вам нужно сделать, это вернуться.

+0

где код, который вызывает функцию gameOver()? – CPerkins

+0

Невозможно увидеть здесь функцию gameOver(). – gashu

+0

'if (y + ya> game.getHeight() - DIAMETER) game.gameOver();' для тех, кто смотрел. Не так сложно найти –

ответ

0

Вы сами ответили на свой вопрос. Предполагая, что нет никаких дополнительных вызовов на ваш GameOver метод(), чем тот, который в своем движении() метод, чем GameOver вызывается из этого, если блок:

if(y + ya > game.getHeight() - DIAMETER) 
    game.gameOver(); 

Это означает, что (y + ya) больше (game.getHeight() - DIAMETER). Поскольку я не знаю, какими должны быть ваши переменные, я могу только догадываться, что может возникнуть проблема с вашими начальными значениями и т. Д.

Попробуйте выполнить свою программу с помощью отладчика, и будет намного легче увидеть проблему и понять, что происходит.

+0

вот весь класс шара. Кроме того, да, это единственный вызов gameOver(), но, поэтому я путаю LOL. он переходит непосредственно к gameOver(), а если я изменил gameOver() на ya = -1; то он играет так, как если бы исключение не было игрой. –

+0

Проверьте значения в левой части вашего if (y и ya) и в правой части вашего if (game.getHeight() и DIAMETER). Если у вас нет отладчика, просто распечатайте их в System.out, например System.out.println (y); ... Возможно, game.getHeight() не делает то, что он должен делать ... – markus

Смежные вопросы