1. Paggawa gamit ang mouse
Ang engine ng laro ay may dalawang pamamaraan para sa pagtatrabaho gamit ang mouse:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
, at isulat ang anumang code sa mga ito. At ang game engine mismo ay tatawag sa kanila kapag pinindot ng user ang mga pindutan ng mouse.
onMouseLeftClick(int x, int y)
— tinawag ng makina kapag na-click mo ang kaliwang pindutan ng mouse. Bilang mga argumento, natatanggap nito ang mga coordinate ng cell ng playing field kung saan naganap ang pag-click. Ang itaas na kaliwang cell ay may mga coordinate (0,0). Upang magamit ang paraang ito, dapat itong i-override.onMouseRightClick(int x, int y)
— tinawag kapag nag-right click ka. Gumagana katulad ng pamamaraanonMouseLeftClick(int x, int y)
.
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
import com.javarush.engine.cell.Key;
public class MySuperGame extends Game {
@Override
public void initialize() {
// Устанавливаем размер игрового поля 3x3
setScreenSize(3, 3);
// Закрашиваем игровое поле белым цветом
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) {
// Ставим символ "X" в клетку по которой кликнули левой кнопкой мыши
setCellValue(x, y, "X");
}
@Override
public void onMouseRightClick(int x, int y) {
// Очищаем клетку по которой кликнули правой кнопкой мыши
setCellValue(x, y, "");
}
}
2. Paggawa gamit ang keyboard
Ang engine ng laro ay may dalawang paraan para sa pagtatrabaho sa keyboard:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
— tinatawag kapag pinindot ang anumang keyboard key. Ang halaga ng pinindot na key (o Key.UNKNOWN) ay ipinapasa sa pamamaraan bilang key argument.onKeyReleased (Key key)
— tinatawag kapag ang anumang key ng keyboard ay inilabas. Kinukuha ng key argument ang halaga ng kaukulang key (o Key.UNKNOWN).
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
import com.javarush.engine.cell.Key;
public class MySuperGame extends Game {
@Override
public void initialize() {
// Устанавливаем размер игрового поля 3x3
setScreenSize(3, 3);
// Закрашиваем игровое поле белым цветом
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) {
// При нажатии пробела, центральная клетка становится желтой
if (key == Key.SPACE) {
setCellColor(1, 1, Color.YELLOW);
}
}
@Override
public void onKeyReleased(Key key) {
// При отпускании пробела, центральной клетке возвращается белый цвет
if (key == Key.SPACE) {
setCellColor(1, 1, Color.WHITE);
}
}
}
Mahalaga! Sa kasalukuyang bersyon ng engine, ang uri ng Key ay maaari lamang tumanggap ng isang limitadong hanay ng mga halaga (9 na mga PC):
Ibig sabihin | Ano ang na-click ng gumagamit |
---|---|
Susi.ENTER | Pinindot ng user ang Enter button |
Susi.TAKAS | Pinindot ng user ang Esc button |
Key.PAUSE | Na-click ng user ang button na I-pause |
Key.SPACE | Pinindot ng user ang Space |
Susi.LEFT | Pinindot ng user ang Left Arrow |
Susi. TAMA | Pinindot ng user ang Right Arrow |
Susi pataas | Pinindot ng user ang Up Arrow |
Susi.PABABA | Pinindot ng user ang Pababang Arrow |
Susi.HINDI ALAM | Anumang susi maliban sa mga nakalista sa itaas |
3. Paggawa gamit ang timer
Maraming mga laro ang nagaganap sa real time, ibig sabihin, kahit na walang ginagawa ang user, ang mga kaganapan sa laro ay isinasagawa pa rin. Upang maipatupad mo ang mga ganitong laro, nagdagdag kami ng pag-andar ng timer sa engine ng laro. Gumagana ito ng isang bagay tulad nito: i-on mo ang timer at itakda ang yugto ng panahon pagkatapos nito dapat itong tumunog. Halimbawa, 500 milliseconds. Pagkatapos nito, bawat kalahating segundo ay tinatawag ng Game Engine angonTurnTimer()
. Isang walang katapusang bilang ng beses hanggang sa i-off ang timer. Paano gamitin ang timer?
-
I-on ang timer.
Для этого есть специальный метод
void setTurnTimer(int timeMs)
. В качестве аргумента метод принимает длительность интервала между вызовами в миллисекундах (1/1000 секунды). Достаточно один раз вызвать его, и игровой движок начнет вызывать методonTurn()
каждые timeMs миллисекунд. -
Переопределяем метод onTurn(int).
Для этого необходимо объявить метод
void onTurn(int step)
в классе, унаследованном от классаGame
. Этот метод будет вызываться игровым движком. При этом движок каждый раз будет передавать в метод порядковый номер такого вызова (1,2,3, …). -
Выключаем таймер.
Если таймер больше не нужен, когда, например, пользователь прошел игру, его можно выключить. Для этого нужно просто вызвать метод
stopTurnTimer()
. -
Ускоряем or меняем таймер.
В некоторых играх события постоянно ускоряются, поэтому было бы удобно ускорять наш таймер (уменьшать время между вызовами). Нет ничего проще: вызовите
setTurnTimer(int timeMs)
еще раз, с новым meaningм, и время между вызовамиonTurn()
изменится.
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
public class MySuperGame extends Game {
…
@Override
public void initialize() {
// Создаем игровое поле 3x3 клетки
setScreenSize(3, 3);
showGrid(false);
setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
setTurnTimer(500); //Включаем таймер, интервал между вызовами – 500мс.
}
@Override
public void onTurn(int step) {
if(step == 100) {
stopTurnTimer(); // если прошло 100 тактов, выключаем таймер
}
if (step % 2 == 1) {
// Если данный такт нечётный, установить клетке красный фон
setCellColor(1, 1, Color.RED);
} else {
//если данный такт чётный, установить клетке синий фон
setCellColor(1, 1, Color.BLUE);
}
}
…
}
В этом простом примере мы создали поле размером 3x3 клетки. Затем включor таймер, который каждые полсекунды будет вызывать метод onTurn()
. Каждые полсекунды будет меняться цвет клетки, при этом ее контент не изменится. Через 50 секунд цвет перестанет меняться. На этом все! Если вы хотите узнать о разделе "Игры" больше, вот полезная documentация, которая может в этом помочь:
GO TO FULL VERSION