
1. Arbeta med musen
Spelmotorn har två metoder för att arbeta med musen:-
void onMouseLeftClick(int x, int y);
-
void onMouseRightClick(int x, int y);
Game
och lägger till vilken kod du vill ha till dem. Spelmotorn anropar dem när användaren klickar på musknapparna.
-
onMouseLeftClick(int x, int y)
— anropas av motorn när vänster musknapp klickas. Dess parametrar är koordinaterna för cellen på spelplanen där klicket inträffade. Den övre vänstra cellen har koordinater (0, 0). Du måste åsidosätta den här metoden för att använda den. -
onMouseRightClick(int x, int y)
— anropas när du klickar på höger musknapp. Denna metod fungerar somonMouseLeftClick(int x, int y)
metoden.
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. Arbeta med tangentbordet
Spelmotorn har två metoder för att arbeta med tangentbordet:-
void onKeyPress(Key key);
-
void onKeyReleased(Key key);
-
onKeyPress(Key key)
— anropas när någon knapp trycks ned. Nyckelparametern är den nedtryckta knappen (eller Key.OKNOWN). -
onKeyReleased(Key key)
— anropas när någon tangent släpps. Nyckelparametern är motsvarande nyckel (eller 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);
}
}
}
Viktig! I den nuvarande versionen av spelmotorn har nyckeltypen en begränsad uppsättning av nio värden:Värde | Tangent nedtryckt av användaren |
---|---|
Knapp.ENTER | Användaren tryckte på Enter |
Key.ESCAPE | Användaren tryckte på Esc |
Knapp.PAUS | Användaren tryckte på Paus |
Key.SPACE | Användaren tryckte på mellanslag |
Tangent.VÄNSTER | Användaren tryckte på vänsterpilen |
Nyckel.HÖGER | Användaren tryckte på högerpilen |
Key.UP | Användaren tryckte på uppåtpilen |
Nyckel ner | Användaren tryckte på ned-knappen |
Nyckel.OKÄND | Användaren tryckte på en annan tangent än de ovan |
3. Arbeta med timern
Många spel sker i realtid, det vill säga även om användaren inte gör något så inträffar fortfarande händelser i spelet. För att du ska kunna implementera sådana spel har vi lagt till en timer i spelmotorn. Det fungerar ungefär så här: du sätter på timern och ställer in timerintervallet. Till exempel 500 millisekunder. Sedan, varje halv sekund, anropar spelmotornonTurnTimer()
metoden. Om och om igen för alltid — tills timern stängs av. Så hur använder du timern?
-
Slå på timern.
För att göra detta finns det en speciell metod. Metoden tar som argument intervallet mellan anrop i millisekunder (1 millisekund = 1/1000 sekund). Du behöver bara anropa den en gång, och spelmotorn kommer att börja anropa metoden varje gång på millisekunder.
void setTurnTimer(int timeMs)
onTurn()
-
Åsidosätt onTurn(int)-metoden.
För att göra detta måste du deklarera en metod i klassen som ärver . Denna metod kommer att anropas av spelmotorn. Dessutom kommer spelmotorn för varje anrop att skicka en sekventiell identifierare för anropet till metoden (1, 2, 3, …).
void onTurn(int step)
Game
-
Stäng av timern.
Om timern inte längre behövs, till exempel när användaren slutför spelet, kan du stänga av den. För att göra detta behöver du bara anropa metoden.
stopTurnTimer()
-
Accelerera eller ändra timern.
I vissa spel ökar takten med vilken händelser inträffar ständigt, så det skulle vara bekvämt att snabba upp vår timer (minska tiden mellan samtal). Inget kan vara enklare: ring en gång till med ett nytt värde, så ändras
setTurnTimer(int timeMs)
tiden mellan samtalen.onTurn()
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 detta enkla exempel skapade vi ett fält som är 3 celler x 3 celler. Sedan startade vi en timer som kommer att anropa onTurn()
metoden varje halv sekund. Varje halv sekund kommer cellfärgen att ändras, men dess innehåll ändras inte. Efter 50 sekunder kommer färgen inte längre att ändras. Det var allt tills vidare! Om du vill lära dig mer om avsnittet "Spel", här är lite användbar dokumentation som kan hjälpa:
GO TO FULL VERSION