1. Werken met de muis
De game-engine heeft twee methoden om met de muis te werken:-
void onMouseLeftClick(int x, int y);
-
void onMouseRightClick(int x, int y);
Game
en voegt er elke gewenste code aan toe. De game-engine roept ze op wanneer de gebruiker op muisknoppen klikt.
-
onMouseLeftClick(int x, int y)
- aangeroepen door de motor wanneer op de linkermuisknop wordt geklikt. De parameters zijn de coördinaten van de cel van het speelveld waar de klik plaatsvond. De cel linksboven heeft coördinaten (0, 0). U moet deze methode overschrijven om deze te gebruiken. -
onMouseRightClick(int x, int y)
- aangeroepen wanneer met de rechtermuisknop wordt geklikt. Deze methode werkt zoals deonMouseLeftClick(int x, int y)
methode.
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. Werken met het toetsenbord
De game-engine heeft twee methoden om met het toetsenbord te werken:-
void onKeyPress(Key key);
-
void onKeyReleased(Key key);
-
onKeyPress(Key key)
— opgeroepen wanneer een willekeurige toets wordt ingedrukt. De sleutelparameter is de ingedrukte toets (of Key.UNKNOWN). -
onKeyReleased(Key key)
- aangeroepen wanneer een toets wordt losgelaten. De sleutelparameter is de corresponderende sleutel (of Key.UNKNOWN).
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);
}
}
}
Belangrijk! In de huidige versie van de game-engine heeft het sleuteltype een beperkte set van negen waarden:Waarde | Toets ingedrukt door de gebruiker |
---|---|
Sleutel.ENTER | De gebruiker drukte op Enter |
Sleutel.ESCAPE | De gebruiker heeft op Esc gedrukt |
Toets.PAUSE | De gebruiker heeft op Pauze gedrukt |
Sleutel.RUIMTE | De gebruiker drukte op Spatie |
Sleutel.LINKS | De gebruiker drukte op de linkerpijltoets |
Sleutel.RECHTS | De gebruiker drukte op de rechterpijltoets |
Sleutel.UP | De gebruiker drukte op de pijl-omhoog-toets |
Toets neer | De gebruiker drukte op de neer-toets |
Sleutel.ONBEKEND | De gebruiker heeft op een andere toets gedrukt dan de bovenstaande |
3. Werken met de timer
Veel spellen vinden in realtime plaats, dwz zelfs als de gebruiker niets doet, vinden er nog steeds gebeurtenissen plaats in het spel. Om u in staat te stellen dergelijke spellen te implementeren, hebben we een timer aan de game-engine toegevoegd. Het werkt ongeveer zo: je zet de timer aan en stelt het timerinterval in. Bijvoorbeeld 500 milliseconden. Vervolgens roept de game-engine elke halve seconde deonTurnTimer()
methode aan. Keer op keer voor altijd - totdat de timer wordt uitgeschakeld. Dus hoe gebruik je de timer?
-
Schakel de timer in.
Om dit te doen, is er een speciale methode. De methode neemt als argument het interval tussen oproepen in milliseconden (1 milliseconde = 1/1000 seconde). Je hoeft het maar één keer aan te roepen en de game-engine begint de methode elke milliseconde aan te roepen.
void setTurnTimer(int timeMs)
onTurn()
-
Negeer de onTurn(int) methode.
Om dit te doen, moet u een methode declareren in de klasse die overerft . Deze methode wordt aangeroepen door de game-engine. Bovendien geeft de game-engine bij elke oproep een sequentiële identificatie voor de oproep door aan de methode (1, 2, 3, …).
void onTurn(int step)
Game
-
Schakel de timer uit.
Als de timer niet meer nodig is, bijvoorbeeld wanneer de gebruiker het spel voltooit, kun je deze uitschakelen. Om dit te doen, hoeft u alleen maar de methode aan te roepen.
stopTurnTimer()
-
Versnel of verander de timer.
In sommige games neemt de snelheid waarmee gebeurtenissen plaatsvinden voortdurend toe, dus het zou handig zijn om onze timer te versnellen (de tijd tussen oproepen verkorten). Niets is eenvoudiger: bel
setTurnTimer(int timeMs)
opnieuw met een nieuwe waarde en de tijd tussenonTurn()
oproepen verandert.
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);
}
}
…
}
In dit eenvoudige voorbeeld hebben we een veld gemaakt van 3 cellen x 3 cellen. Daarna hebben we een timer gestart die de onTurn()
methode elke halve seconde zal aanroepen. Elke halve seconde verandert de kleur van de cel, maar de inhoud verandert niet. Na 50 seconden verandert de kleur niet meer. Dat is het voor nu! Als u meer wilt weten over het gedeelte "Games", vindt u hier wat nuttige documentatie die kan helpen:
GO TO FULL VERSION