CodeGym /Blog Java /Random-ES /Sección de juegos en CodeGym: Gestión de eventos
John Squirrels
Nivel 41
San Francisco

Sección de juegos en CodeGym: Gestión de eventos

Publicado en el grupo Random-ES
"Juegos" de CodeGym es una nueva sección con grandes tareas interesantes donde creas tus propias versiones de juegos populares. Es simple: cada proyecto de juego se divide en subtareas. Complétalos uno por uno y el juego habrá terminado. Puedes compartirlo en las redes sociales e invitar a tus amigos a jugar. Sección "Juegos" en CodeGym: Manejo de eventos - 1En este artículo, describiremos en detalle los métodos de manejo de eventos usados ​​para escribir juegos.

1. Trabajar con el ratón

El motor del juego tiene dos métodos para trabajar con el mouse:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);

Simplemente declara estos métodos en su clase que hereda Gamey agrega cualquier código que desee. El motor del juego los llamará cuando el usuario haga clic en los botones del mouse.
  1. onMouseLeftClick(int x, int y)— llamado por el motor cuando se hace clic en el botón izquierdo del ratón. Sus parámetros son las coordenadas de la celda del campo de juego donde ocurrió el clic. La celda superior izquierda tiene coordenadas (0, 0). Debe anular este método para usarlo.

  2. onMouseRightClick(int x, int y)— se llama cuando se hace clic con el botón derecho del mouse. Este método funciona como el onMouseLeftClick(int x, int y)método.

He aquí un ejemplo del uso de estos métodos:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                setCellColor(x, y, Color.WHITE);
            }
        }
    }

    @Override
    public void onMouseLeftClick(int x, int y) {
        // Set "X" in the cell where the left mouse click occurred
        setCellValue(x, y, "X");
    }

    @Override
    public void onMouseRightClick(int x, int y) {
        // Clear the cell where the right mouse click occurred
        setCellValue(x, y, "");
    }
}

2. Trabajar con el teclado

El motor del juego tiene dos métodos para trabajar con el teclado:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);

Si desea que suceda algo cuando el usuario presiona una tecla, declare estos métodos en su clase que hereda Game y agrégueles su código. El motor del juego los llamará cuando el usuario presione o suelte una tecla.
  1. onKeyPress(Key key)— llamado cuando se presiona cualquier tecla. El parámetro clave es la tecla presionada (o Key.UNKNOWN).

  2. onKeyReleased(Key key)— se llama cuando se suelta cualquier tecla. El parámetro clave es la clave correspondiente (o Key.UNKNOWN).

He aquí un ejemplo del uso de estos métodos:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                setCellColor(x, y, Color.WHITE);
            }
        }
    }

    @Override
    public void onKeyPress(Key key) {
        // When the space bar is pressed, the center cell turns yellow
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.YELLOW);
        }
    }

    @Override
    public void onKeyReleased(Key key) {
        // When the space bar is released, the center cell changes back to white
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.WHITE);
        }
    }
}
¡Importante! En la versión actual del motor del juego, el tipo de clave tiene un conjunto limitado de nueve valores:
Valor Tecla presionada por el usuario
Tecla.ENTER El usuario presionó Enter
Clave.ESCAPE El usuario presionó Esc
Tecla.PAUSA El usuario presionó Pausa
Clave.ESPACIO El usuario presionó Espacio
Clave.IZQUIERDA El usuario presionó la tecla de flecha izquierda
Clave.DERECHA El usuario presionó la tecla de flecha derecha
Tecla Arriba El usuario presionó la tecla de flecha hacia arriba
Tecla.ABAJO El usuario presionó la tecla de abajo
Clave.DESCONOCIDA El usuario presionó una tecla diferente a las anteriores

3. Trabajar con el temporizador

Muchos juegos suceden en tiempo real, es decir, incluso si el usuario no hace nada, los eventos aún ocurren en el juego. Para permitirle implementar dichos juegos, agregamos un temporizador al motor del juego. Funciona de la siguiente manera: enciende el temporizador y establece el intervalo del temporizador. Por ejemplo, 500 milisegundos. Luego, cada medio segundo, el motor del juego llama al onTurnTimer()método. Una y otra vez para siempre, hasta que se apague el temporizador. Entonces, ¿cómo se usa el temporizador?
  1. Enciende el temporizador.

    Para hacer esto, hay un void setTurnTimer(int timeMs)método especial. El método toma como argumento el intervalo entre llamadas en milisegundos (1 milisegundo = 1/1000 segundo). Solo necesita llamarlo una vez, y el motor del juego comenzará a llamar al onTurn()método cada vez, ms milisegundos.

  2. Anula el método onTurn(int).

    Para hacer esto, debe declarar un void onTurn(int step)método en la clase que hereda Game. Este método será llamado por el motor del juego. Además, con cada llamada, el motor del juego pasará al método un identificador secuencial para la llamada (1, 2, 3, …).

  3. Apague el temporizador.

    Si ya no se necesita el temporizador, por ejemplo, cuando el usuario completa el juego, puede apagarlo. Para hacer esto, simplemente necesita llamar al stopTurnTimer()método.

  4. Acelerar o cambiar el temporizador.

    En algunos juegos, la velocidad a la que ocurren los eventos se acelera constantemente, por lo que sería conveniente acelerar nuestro temporizador (reducir el tiempo entre llamadas). Nada podría ser más fácil: llame setTurnTimer(int timeMs)una vez más con un nuevo valor y el tiempo entre onTurn()llamadas cambiará.

Por ejemplo:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
    …
    @Override
    public void initialize() {
    	// Create a playing field that is 3 cells x 3 cells
        setScreenSize(3, 3);
        showGrid(false);
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);

        setTurnTimer(500);   // Turn on the timer, the interval between calls is 500ms.
    }

    @Override
    public void onTurn(int step) {
        if(step == 100) {
            stopTurnTimer();  // If 100 calls have been made, turn off the timer
        }

        if (step % 2 == 1) {
            // If this call is odd, set the cell background to red
            setCellColor(1, 1, Color.RED);
        } 
        else {
            // If this call is even, set the cell background to blue
            setCellColor(1, 1, Color.BLUE);

        }
    }
    …
}
En este ejemplo simple, creamos un campo de 3 celdas x 3 celdas. Luego iniciamos un temporizador que llamará al onTurn()método cada medio segundo. Cada medio segundo, el color de la celda cambiará, pero su contenido no cambiará. Después de 50 segundos, el color ya no cambiará. ¡Eso es todo por ahora! Si desea obtener más información sobre la sección "Juegos", aquí hay una documentación útil que puede ayudar:
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION