CodeGym /Java blog /Tilfældig /Spilsektion på CodeGym: Begivenhedshåndtering
John Squirrels
Niveau
San Francisco

Spilsektion på CodeGym: Begivenhedshåndtering

Udgivet i gruppen
"Spil" fra CodeGym er en ny sektion med store interessante opgaver, hvor du laver dine egne versioner af populære spil. Det er enkelt: hvert spilprojekt er opdelt i underopgaver. Gennemfør dem én efter én, og spillet er færdigt. Du kan dele det på sociale netværk og invitere dine venner til at spille. Sektionen "Spil" på CodeGym: Begivenhedshåndtering - 1I denne artikel vil vi i detaljer beskrive de hændelseshåndteringsmetoder , der bruges til at skrive spil.

1. Arbejde med musen

Spilmotoren har to metoder til at arbejde med musen:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);

Du erklærer simpelthen disse metoder i din klasse, der arver Game, og tilføjer enhver kode, du ønsker, til dem. Spillemaskinen kalder dem, når brugeren klikker på museknapperne.
  1. onMouseLeftClick(int x, int y)— kaldes af motoren, når der klikkes på venstre museknap. Dens parametre er koordinaterne for cellen på spillefeltet, hvor klikket fandt sted. Den øverste venstre celle har koordinater (0, 0). Du skal tilsidesætte denne metode for at bruge den.

  2. onMouseRightClick(int x, int y)— kaldes, når der klikkes på højre museknap. Denne metode fungerer som onMouseLeftClick(int x, int y)metoden.

Her er et eksempel på brugen af ​​disse metoder:

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. Arbejde med tastaturet

Spilmotoren har to metoder til at arbejde med tastaturet:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);

Hvis du vil have, at der skal ske noget, når brugeren trykker på en tast, så erklær disse metoder i din klasse, der arver spillet, og tilføj din kode til dem. Spillemaskinen vil kalde dem, når brugeren trykker på eller slipper en tast.
  1. onKeyPress(Key key)— kaldes, når der trykkes på en vilkårlig tast. Nøgleparameteren er den nedtrykte tast (eller Key.UNKNOWN).

  2. onKeyReleased(Key key)— kaldes, når en tast slippes. Nøgleparameteren er den tilsvarende nøgle (eller Key.UNKNOWN).

Her er et eksempel på brugen af ​​disse metoder:

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);
        }
    }
}
Vigtig! I den aktuelle version af spilmotoren har nøgletypen et begrænset sæt på ni værdier:
Værdi Tast trykket af brugeren
Tast.ENTER Brugeren trykkede på Enter
Key.ESCAPE Brugeren trykkede på Esc
Tast.PAUSE Brugeren trykkede på Pause
Nøgle.MELLEMRUM Brugeren trykkede på mellemrumstasten
Tast.VENSTRE Brugeren trykkede på venstre piletast
Nøgle.HØJRE Brugeren trykkede på højre piletast
Tast.OP Brugeren trykkede på pil op-tasten
Tast.NED Brugeren trykkede på ned-tasten
Nøgle.UKENDT Brugeren trykkede på en anden tast end ovenstående

3. Arbejde med timeren

Mange spil foregår i realtid, dvs. selvom brugeren ikke gør noget, sker der stadig begivenheder i spillet. For at gøre det muligt for dig at implementere sådanne spil, har vi tilføjet en timer til spilmotoren. Det fungerer sådan her: du tænder for timeren og indstiller timerintervallet. For eksempel 500 millisekunder. Derefter kalder spilmotoren onTurnTimer()metoden hvert halve sekund. Igen og igen for evigt - indtil timeren slukkes. Så hvordan bruger du timeren?
  1. Tænd timeren.

    For at gøre dette er der en speciel metode. Metoden tager som argument intervallet mellem opkald i millisekunder (1 millisekund = 1/1000 sekund). Du behøver kun at kalde det én gang, og spilmotoren vil begynde at kalde metoden hver gang i millisekunder.void setTurnTimer(int timeMs)onTurn()

  2. Tilsidesæt onTurn(int)-metoden.

    For at gøre dette skal du erklære en metode i klassen, der arver . Denne metode vil blive kaldt af spilmotoren. Hvad mere er, med hvert opkald vil spilmotoren videregive en sekventiel identifikator for opkaldet til metoden (1, 2, 3, …).void onTurn(int step)Game

  3. Sluk timeren.

    Hvis timeren ikke længere er nødvendig, for eksempel når brugeren fuldfører spillet, kan du slå den fra. For at gøre dette skal du blot kalde metoden.stopTurnTimer()

  4. Accelerer eller skift timeren.

    I nogle spil accelererer hastigheden, hvormed hændelser sker konstant, så det ville være praktisk at fremskynde vores timer (reducere tiden mellem opkald). Intet kunne være nemmere: Ring setTurnTimer(int timeMs)igen med en ny værdi, og tiden mellem onTurn()opkaldene ændres.

For eksempel:

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);

        }
    }
    …
}
I dette simple eksempel oprettede vi et felt, der er 3 celler x 3 celler. Så startede vi en timer, der kalder onTurn()metoden hvert halve sekund. Hvert halve sekund ændres cellefarven, men dens indhold ændres ikke. Efter 50 sekunder vil farven ikke længere ændre sig. Det er alt for nu! Hvis du vil lære mere om afsnittet "Spil", er her noget nyttig dokumentation, der kan hjælpe:
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION