Cómo llamar a un método gameover en un juego de Java cuando Sprite “cae” la pantalla?

StackOverflow https://stackoverflow.com/questions/526743

  •  22-08-2019
  •  | 
  •  

Pregunta

Estoy desarrollando un sencillo juego de plataformas en Java usando BlueJ.

Durante las próximas semanas voy a publicar una serie de preguntas para pedir ayuda con este proyecto como no soy muy hábil en la programación. Así que espero que no llego a ser molesto y estaría muy agradecidos si usted amablemente me puede ayudar.

En mi juego que tienen un método gameover que termina el juego e imprime una declaración a la consola. Lo que me gustaría es hacer un llamamiento a este método cuando el jugador mis sprites "se cae" la pantalla.

Ahora mismo tengo una forma de rectángulo colocado en la parte inferior de la pantalla para representar algún tipo de peligro (como el agua) y cuando el jugador choca con él, se llama al método gameover y termina el juego. Sin embargo, yo todavía prefieren si el juego finaliza cuando el jugador cayó por debajo de una cierta altura de la pantalla.

Este es mi método gameover (de la clase 'Juego') -

/** End the game. */
public void gameOver()
{
    world.terminate();
    isOver = true;
}

Esta es mi jugador de sprites (actualmente dibujado utilizando un polígono) -

super(Utils.createPolygon(170, 102,
    155, 118, 137, 118, 151, 134, 146,
    140, 167, 140, 170, 135, 174, 140,
    193, 140, 188, 134, 202, 118, 186,
    118, 170, 102)); 
setColor(new Color(254, 167, 184));

Este es el código (de la clase 'enemigo', un código similar se utiliza en una Clase de riesgo también) de que el juego termina cuando el jugador choca con un enemigo -

if (e.contact.involves(player) && (player.getLives() < 1)) {
    System.out.println("YOU ARE DEAD!");
    game.gameOver();
}

Me gustaría tener un semejante, o por lo menos sencilla solución que va a llamar a mi método gameover cuando un jugador cae mis sprites o va más allá de un cierto coordenadas de la pantalla.

Le agradecería que tuviera a bien proporcionar un código de ejemplo / ejemplo, con comentarios para ayudarme a entender que, con el fin de dar una idea de lo que debía hacer para lograrlo.

Muchas gracias y espero sus respuestas.

¿Fue útil?

Solución

Para empezar:

  1. Piense en cómo se puede obtener la posición actual del jugador.
  2. Piense en lo que hace que el jugador caída (debe haber algún método / clase que implementa la gravedad y la caída?)
  3. Comprobar la posición del jugador, ya que quedan frente a las límites de su mundo. Si están fuera de los limites, es el momento de llamar a su método de GameOver.

Para comprobar las límites:

  1. El mundo debe tener una altura mínima que el jugador tiene que mantener por encima de mantenerse con vida. Recuerde que este valor.
  2. Si obtiene la posición vertical del reproductor y los compara a esta altura mínima, que debe obtener un resultado booleano (seguro contra muerto).
  3. Tenga en cuenta que la posición de pantalla se inicia en la parte superior izquierda y se incrementa a medida que avanza la derecha y hacia abajo, por lo que está la posición del jugador probablemente refleja esto. Por lo tanto, lo más probable en busca de la prueba (player.getPosition().Y > world.getMaxAllowedHeight());

A modo de referencia: Por favor, publique lo que ha intentado ya y en el que está teniendo problemas. Pidiendo una solución Spoonfed no va a ayudar a nadie - que vas a tener que pensar en esto un poco a sí mismo. Si usted no tiene idea de por dónde empezar, nos dicen que en su lugar; podemos tratar de guiarlo en la dirección correcta.

Actualización: Parece que has hecho un poco de pensamiento ya, que es grande! Lo siento si yo era dura para saltar por la garganta, pero su puesto original sugería lo contrario. La próxima vez, sin embargo, no tratar de hacer una Help Me Help-yo-pregunta-más de una solución-que-para-mí. Un simple "¿Alguien me puede dar una idea de cómo empezar a abordar este problema?" va a hacer.

Otros consejos

Para ayudarle a hacer su tarea:

   // if the player goes out of bounds, the game is over
   if (player.getBounds().outside(game.getBounds()) 
   {
        System.out.println("YOU WENT OUT!");
        game.gameOver();
    }

suponiendo que el jugador tiene algún tipo de área de delimitación y el juego en sí tiene algún tipo de área ...

Una buena pregunta que debe hacerse es, "¿Dónde está mi sprites?".

La siguiente pregunta es, "¿Cuáles son los límites de mi mundo?".

Si usted puede contestar a estas dos preguntas, entonces usted debería ser capaz de responder a su propia pregunta.

Si se asume que usted tiene un mundo de dos dimensiones, siempre y cuando la ubicación del sprite está dentro de los límites horizontales, así como dentro de los límites verticales, entonces tu sprite todavía está en el mapa, de lo contrario, no lo es.

¿Tiene un gameloop?

Por lo general, en un juego no es comprarme una clase de tightloop que controla el proceso de la lógica y de la representación, algo así.

while(stillRunning)
{

   if(isPlayerDead()) 
   { 
       showGameOverScreen(); 
   }
   else
   {
       PerformLogic();
       RenderToScreen();
   }

   sleep(0);
}

Usted tendrá que ampliar el método isPlayerDead () para comprobar las colisiones y si la ubicación de tu sprite es mayor que la altura de la pantalla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top