![Раздел „Игри“ в CodeGym: Обработка на събития – 1](https://cdn.codegym.cc/images/article/11e03e45-a049-4023-b6a9-93e6d9fe6a74/512.jpeg)
1. Работа с мишката
Двигателят на играта има два метода за работа с мишката:-
void onMouseLeftClick(int x, int y);
-
void onMouseRightClick(int x, int y);
Game
, и добавяте Howъвто искате code към тях. Двигателят на играта ще ги извика, когато потребителят щракне върху бутоните на мишката.
-
onMouseLeftClick(int x, int y)
— извиква се от двигателя при щракване с левия бутон на мишката. Неговите параметри са координатите на клетката на игралното поле, където е настъпило щракването. Горната лява клетка има координати (0, 0). Трябва да отмените този метод, за да го използвате. -
onMouseRightClick(int x, int y)
— извиква се при натискане на десния бутон на мишката. Този метод работи катоonMouseLeftClick(int x, int y)
метода.
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. Работа с клавиатурата
Двигателят на играта има два метода за работа с клавиатурата:-
void onKeyPress(Key key);
-
void onKeyReleased(Key key);
-
onKeyPress(Key key)
— извиква се при натискане на произволен клавиш. Ключовият параметър е натиснатият клавиш (or Key.UNKNOWN). -
onKeyReleased(Key key)
— извиква се при отпускане на произволен клавиш. Ключовият параметър е съответният ключ (or 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);
}
}
}
важно! В текущата version на двигателя на играта, типът ключ има ограничен набор от девет стойности:Стойност | Клавиш, натиснат от потребителя |
---|---|
Ключ.ENTER | Потребителят натисна Enter |
Ключ.БЯГСТВО | Потребителят натисна Esc |
Ключ.ПАУЗА | Потребителят натисна пауза |
Key.SPACE | Потребителят натисна интервал |
Ключ.НАЛЯВО | Потребителят натисна клавиша със стрелка наляво |
Ключ. НАДЯСНО | Потребителят натисна клавиша със стрелка надясно |
Key.UP | Потребителят натисна клавиша със стрелка нагоре |
Ключ НАДОЛУ | Потребителят натисна клавиша надолу |
Ключ.НЕИЗВЕСТЕН | Потребителят е натиснал клавиш, различен от тези по-горе |
3. Работа с таймера
Много игри се случват в реално време, т.е. дори ако потребителят не направи нищо, събитията продължават да се случват в играта. За да ви позволим да реализирате такива игри, ние добавихме таймер към двигателя на играта. Работи по следния начин: включвате таймера и задавате интервала на таймера. Например 500 мorсекунди. След това на всеки половин секунда двигателът на играта извикваonTurnTimer()
метода. Отново и отново завинаги - докато таймерът не бъде изключен. И така, How използвате таймера?
-
Включете таймера.
За да направите това, има специален
void setTurnTimer(int timeMs)
метод. Методът приема като аргумент интервала между извикванията в мorсекунди (1 мorсекунда = 1/1000 секунда). Трябва да го извикате само веднъж и двигателът на играта ще започне да извиква методаonTurn()
на всеки мorсекунди. -
Заменете метода onTurn(int).
За да направите това, трябва да декларирате
void onTurn(int step)
метод в класа, който наследяваGame
. Този метод ще бъде извикан от двигателя на играта. Нещо повече, с всяко повикване двигателът на играта ще предаде на метода последователен идентификатор за повикването (1, 2, 3, …). -
Изключете таймера.
Ако таймерът вече не е необходим, например когато потребителят завърши играта, можете да го изключите. За да направите това, просто трябва да извикате
stopTurnTimer()
метода. -
Ускорете or сменете таймера.
В някои игри скоростта, с която се случват събития, непрекъснато се ускорява, така че би било удобно да ускорим нашия таймер (намалете времето между повикванията). Нищо не може да бъде по-лесно: обадете се
setTurnTimer(int timeMs)
отново с нова стойност и времето между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);
}
}
…
}
В този прост пример създадохме поле, което е 3 клетки x 3 клетки. След това стартирахме таймер, който ще извиква onTurn()
метода на всеки половин секунда. На всеки половин секунда цветът на клетката ще се променя, но съдържанието й няма да се променя. След 50 секунди цветът вече няма да се промени. Това е всичко за сега! Ако искате да научите повече за раздела „Игри“, ето полезна documentация, която може да ви помогне:
GO TO FULL VERSION