JavaRush의 "게임"은 인기 게임의 자신만의 버전을 만들기 위한 흥미롭고 대규모 작업이 포함된 새로운 섹션입니다. 간단합니다. 각 게임 프로젝트는 하위 작업으로 구분됩니다. 하나씩 완성하면 게임이 준비됩니다. 소셜 네트워크에서 공유하고 친구를 초대하여 플레이할 수 있습니다. 이 자료에서는 게임 작성 시 이벤트 처리 방법에 대해 자세히 설명합니다 .
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.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);
}
}
}
중요한! 현재 버전의 엔진에서 키 유형은 제한된 값 세트(9개)만 허용할 수 있습니다.
의미 | 사용자가 클릭한 내용 |
---|---|
키.엔터 | 사용자가 Enter 버튼을 눌렀습니다. |
키.ESCAPE | 사용자가 Esc 버튼을 눌렀습니다. |
키.PAUSE | 사용자가 일시중지 버튼을 클릭했습니다. |
키.SPACE | 사용자가 Space를 눌렀습니다. |
키.왼쪽 | 사용자가 왼쪽 화살표를 눌렀습니다. |
키.오른쪽 | 사용자가 오른쪽 화살표를 눌렀습니다. |
키업 | 사용자가 위쪽 화살표를 눌렀습니다. |
키.DOWN | 사용자가 아래쪽 화살표를 눌렀습니다. |
키.알 수 없음 | 위에 나열된 키를 제외한 모든 키 |
3. 타이머 작업
많은 게임이 실시간으로 진행됩니다. 즉, 사용자가 아무것도 하지 않더라도 게임 내 이벤트는 계속 실행됩니다. 이러한 게임을 구현할 수 있도록 게임 엔진에 타이머 기능을 추가했습니다. 작동 방식은 다음과 같습니다. 타이머를 켜고 타이머가 꺼지는 시간을 설정합니다. 예를 들어 500밀리초입니다. 그 후 매 0.5초마다 게임 엔진이onTurnTimer()
. 타이머가 꺼질 때까지 횟수는 무한합니다. 타이머는 어떻게 사용하나요?
-
타이머를 켜세요.
이에 대한 특별한 방법이 있습니다
void setTurnTimer(int timeMs)
. 인수로 이 메서드는 호출 사이의 간격을 밀리초(1/1000초) 단위로 사용합니다. 한 번만 호출하면 충분하며, 게임 엔진은onTurn()
매 밀리초마다 해당 메서드를 호출하기 시작합니다. -
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 셀의 필드를 만들었습니다. 그런 다음 0.5초마다 메서드를 호출하는 타이머를 켰습니다 onTurn()
. 0.5초마다 셀의 색상이 변경되지만 내용은 변경되지 않습니다. 50초가 지나면 색상이 더 이상 변하지 않습니다. 그게 다야! 게임 섹션에 대해 자세히 알아보려면 다음과 같은 유용한 문서를 참고하세요.
GO TO FULL VERSION