
1. Работа с мышкой
Для работы с мышкой у игрового движка есть два метода:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
, и пишишь в них любой код. А движок сам будет их вызывать, когда пользователь нажимает кнопки мышки.
onMouseLeftClick(int x, int y)
— вызывается движком при клике левой кнопкой мыши. В качестве аргументов получает координаты клетки игрового поля, где произошел клик. Левая верхняя ячейка имеет координаты (0,0). Для использования этого метода, его нужно переопределить.onMouseRightClick(int x, int y)
— вызывается при клике правой кнопкой мыши. Работает аналогично методуonMouseLeftClick(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. Работа с клавиатурой
Для работы с клавиатурой у движка есть два метода:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
— вызывается при нажатии любой клавиши клавиатуры. В качестве аргумента key в метод передается значение нажатой клавиши (или Key.UNKNOWN).onKeyReleased (Key key)
— вызывается при отпускании любой клавиши клавиатуры. В качестве аргумента key получает значение соответствующей клавиши (или 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);
}
}
}
Важно!
В текущей версии движка значение аргумента типа Key может принимать только ограниченный набор значений (9 шт):
Значение | Что нажал пользователь |
---|---|
Key.ENTER | Пользователь нажал кнопку Enter |
Key.ESCAPE | Пользователь нажал кнопку Esc |
Key.PAUSE | Пользователь нажал кнопку Pause |
Key.SPACE | Пользователь нажал Пробел |
Key.LEFT | Пользователь нажал Стрелку Влево |
Key.RIGHT | Пользователь нажал Стрелку Вправо |
Key.UP | Пользователь нажал Стрелку Вверх |
Key.DOWN | Пользователь нажал Стрелку Вниз |
Key.UNKNOWN | Любую клавишу, кроме вышеперечисленных |
3. Работа с таймеромМногие игры происходят в реальном времени, то есть даже если пользователь ничего не делает, события в игре все равно выполняются. Чтобы ты мог реализовывать такие игры, мы добавили в игровой движок работу с таймером.
Работает это примерно так: включаешь таймер и выставляешь временной отрезок, через который он должен срабатывать. Например, 500 миллисекунд. После этого каждые полсекунды движок вызывает метод onTurnTimer()
. Бесконечное число раз, пока таймер не выключат.
Как же пользоваться таймером?
Включаем таймер.
Для этого есть специальный метод void setTurnTimer(int timeMs)
. В качестве аргумента метод принимает длительность интервала между вызовами в миллисекундах (1/1000 секунды). Достаточно один раз вызвать его, и игровой движок начнет вызывать метод onTurn()
каждые timeMs миллисекунд.
Переопределяем метод onTurn(int).
Для этого необходимо объявить метод void onTurn(int step)
в классе, унаследованном от класса Game
. Этот метод будет вызываться игровым движком. При этом движок каждый раз будет передавать в метод порядковый номер такого вызова (1,2,3, …). Его можно назвать тактом
Выключаем таймер.
Если таймер больше не нужен, когда, например, пользователь прошел игру, его можно выключить. Для этого нужно просто вызвать метод stopTurnTimer()
.
Ускоряем или меняем таймер.
В некоторых играх события постоянно ускоряются, поэтому было бы удобно ускорять наш таймер (уменьшать время между вызовами). Нет ничего проще: вызови setTurnTimer(int timeMs)
еще раз, с новым значением, и время между вызовами 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 клетки. Затем включили таймер, который каждые полсекунды будет вызывать метод onTurn()
. Каждые полсекунды будет меняться цвет клетки, при этом ее контент не изменится. Через 50 секунд цвет перестанет меняться.
Включаем таймер.
Для этого есть специальный метод void setTurnTimer(int timeMs)
. В качестве аргумента метод принимает длительность интервала между вызовами в миллисекундах (1/1000 секунды). Достаточно один раз вызвать его, и игровой движок начнет вызывать метод onTurn()
каждые timeMs миллисекунд.
Переопределяем метод onTurn(int).
Для этого необходимо объявить метод void onTurn(int step)
в классе, унаследованном от класса Game
. Этот метод будет вызываться игровым движком. При этом движок каждый раз будет передавать в метод порядковый номер такого вызова (1,2,3, …). Его можно назвать тактом
Выключаем таймер.
Если таймер больше не нужен, когда, например, пользователь прошел игру, его можно выключить. Для этого нужно просто вызвать метод stopTurnTimer()
.
Ускоряем или меняем таймер.
В некоторых играх события постоянно ускоряются, поэтому было бы удобно ускорять наш таймер (уменьшать время между вызовами). Нет ничего проще: вызови setTurnTimer(int timeMs)
еще раз, с новым значением, и время между вызовами 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);
}
}
…
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ