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);
}
}
…
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ