JavaRush /Java Blog /Random-KO /JavaRush의 "게임" 섹션: 이벤트 처리

JavaRush의 "게임" 섹션: 이벤트 처리

Random-KO 그룹에 게시되었습니다
JavaRush의 "게임"은 인기 게임의 자신만의 버전을 만들기 위한 흥미롭고 대규모 작업이 포함된 새로운 섹션입니다. 간단합니다. 각 게임 프로젝트는 하위 작업으로 구분됩니다. 하나씩 완성하면 게임이 준비됩니다. 소셜 네트워크에서 공유하고 친구를 초대하여 플레이할 수 있습니다. 이 자료에서는 게임 작성 시 이벤트 처리장 방법에 대해 자세히 설명합니다 .

1. 마우스로 작업하기

게임 엔진에는 마우스 작업을 위한 두 가지 방법이 있습니다.
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
에서 상속된 게임 클래스에서 이러한 메서드를 선언 Game하고 그 안에 코드를 작성하기만 하면 됩니다. 그리고 게임 엔진 자체는 사용자가 마우스 버튼을 누를 때 이를 호출합니다.
  1. onMouseLeftClick(int x, int y)— 마우스 왼쪽 버튼을 클릭하면 엔진에서 호출됩니다. 인수로 클릭이 발생한 경기장 셀의 좌표를 받습니다. 왼쪽 상단 셀의 좌표는 (0,0)입니다. 이 방법을 사용하려면 재정의해야 합니다.

  2. 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);
사용자가 키보드의 버튼을 누를 때 작업이 발생하도록 하려면 Game에서 상속되는 게임 클래스에서 이러한 메서드를 선언하고 그 안에 코드를 작성하세요. 게임 엔진 자체는 사용자가 키보드 키를 누르거나 놓을 때 이를 호출합니다.
  1. onKeyPress (Key key)— 키보드 키를 누를 때 호출됩니다. 누른 키(또는 Key.UNKNOWN)의 값은 키 인수로 메서드에 전달됩니다.

  2. 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(). 타이머가 꺼질 때까지 횟수는 무한합니다. 타이머는 어떻게 사용하나요?
  1. 타이머를 켜세요.

    이에 대한 특별한 방법이 있습니다 void setTurnTimer(int timeMs). 인수로 이 메서드는 호출 사이의 간격을 밀리초(1/1000초) 단위로 사용합니다. 한 번만 호출하면 충분하며, 게임 엔진은 onTurn()매 밀리초마다 해당 메서드를 호출하기 시작합니다.

  2. onTurn(int) 메서드를 재정의합니다.

    이렇게 하려면 void onTurn(int step)클래스에서 상속된 클래스에 메서드를 선언해야 합니다 Game. 이 메서드는 게임 엔진에 의해 호출됩니다. 이 경우 엔진은 매번 해당 호출의 일련 번호(1,2,3, ...)를 메서드에 전송합니다.

  3. 타이머를 끄십시오.

    타이머가 더 이상 필요하지 않은 경우, 예를 들어 사용자가 게임을 완료했을 때 타이머를 끌 수 있습니다. 이렇게 하려면 stopTurnTimer().

  4. 속도를 높이거나 타이머를 변경하세요.

    일부 게임에서는 이벤트 속도가 지속적으로 빨라지므로 타이머 속도를 높이는 것이 편리합니다(통화 간 시간 단축). 더 간단한 것은 없습니다. 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초가 지나면 색상이 더 이상 변하지 않습니다. 그게 다야! 게임 섹션에 대해 자세히 알아보려면 다음과 같은 유용한 문서를 참고하세요.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION