JavaRush /Blog Java /Random-PL /Sekcja „Gry” w JavaRush: Obsługa zdarzeń

Sekcja „Gry” w JavaRush: Obsługa zdarzeń

Opublikowano w grupie Random-PL
„Gry” od JavaRush to nowa sekcja z ciekawymi i rozbudowanymi zadaniami do tworzenia własnych wersji popularnych gier. To proste: każdy projekt gry jest podzielony na podzadania. Uzupełniaj je jeden po drugim, a gra będzie gotowa. Możesz udostępnić go w sieciach społecznościowych i zaprosić znajomych do gry. RozdziałW tym artykule omówimy szczegółowo metody przetwarzania zdarzeń podczas pisania gier.

1. Praca z myszką

Silnik gry posiada dwie metody pracy z myszą:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Po prostu deklarujesz te metody w klasie gry odziedziczonej z Gamei piszesz w nich dowolny kod. A sam silnik gry wywoła je, gdy użytkownik naciśnie przyciski myszy.
  1. onMouseLeftClick(int x, int y)— wywoływane przez silnik po kliknięciu lewym przyciskiem myszy. Jako argumenty otrzymuje współrzędne komórki pola gry, w której nastąpiło kliknięcie. Lewa górna komórka ma współrzędne (0,0). Aby skorzystać z tej metody, należy ją zastąpić.

  2. onMouseRightClick(int x, int y)— wywoływane po kliknięciu prawym przyciskiem myszy. Działa podobnie jak metoda onMouseLeftClick(int x, int y).
Przykład użycia metod:
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. Praca z klawiaturą

Silnik gry posiada dwie metody pracy z klawiaturą:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);
Jeśli chcesz, aby akcje wykonywały się, gdy użytkownik naciśnie przycisk na klawiaturze, zadeklaruj te metody w klasie gry, która dziedziczy z Game i napisz w nich swój kod. Sam silnik gry wywoła je, gdy użytkownik naciśnie lub zwolni klawisz klawiatury.
  1. onKeyPress (Key key)— wywoływane po naciśnięciu dowolnego klawisza klawiatury. Wartość naciśniętego klawisza (lub Key.UNKNOWN) jest przekazywana do metody jako argument klucza.

  2. onKeyReleased (Key key)— wywoływane po zwolnieniu dowolnego klawisza klawiatury. Argument klucza przyjmuje wartość odpowiedniego klucza (lub Key.UNKNOWN).
Przykład użycia metod:
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);
        }
    }
}
Ważny! W aktualnej wersji silnika typ klucza może przyjmować tylko ograniczony zestaw wartości (9 szt.):
Oznaczający Co kliknął użytkownik
Klawisz ENTER Użytkownik nacisnął przycisk Enter
Klucz.ESCAPE Użytkownik nacisnął przycisk Esc
Klawisz.PAUZA Użytkownik kliknął przycisk Wstrzymaj
Klucz.SPACJA Użytkownik nacisnął spację
Klawisz.LEWY Użytkownik nacisnął strzałkę w lewo
Klucz.PRAWY Użytkownik nacisnął strzałkę w prawo
Klucz.UP Użytkownik nacisnął strzałkę w górę
Klawisz.DÓŁ Użytkownik nacisnął strzałkę w dół
Klucz.NIEZNANY Dowolny klucz z wyjątkiem tych wymienionych powyżej

3. Praca z timerem

Wiele gier toczy się w czasie rzeczywistym, co oznacza, że ​​nawet jeśli użytkownik nic nie zrobi, zdarzenia w grze będą nadal wykonywane. Aby umożliwić wdrażanie takich gier, do silnika gry dodaliśmy funkcję timera. Działa to mniej więcej tak: włączasz timer i ustawiasz czas, po którym ma się wyłączyć. Na przykład 500 milisekund. Następnie co pół sekundy silnik gry wywołuje plik onTurnTimer(). Nieskończoną liczbę razy, aż do wyłączenia timera. Jak korzystać z timera?
  1. Włącz minutnik.

    Jest na to specjalna metoda void setTurnTimer(int timeMs). Jako argument metoda przyjmuje czas trwania interwału między wywołaniami w milisekundach (1/1000 sekundy). Wystarczy raz ją wywołać, a silnik gry zacznie wywoływać metodę onTurn()za każdym razem, gdy upłynie kilka milisekund.

  2. Zastąp metodę onTurn(int).

    Aby to zrobić, musisz zadeklarować metodę void onTurn(int step)w klasie odziedziczonej z klasy Game. Ta metoda zostanie wywołana przez silnik gry. W takim przypadku silnik każdorazowo przekaże do metody numer seryjny takiego wywołania (1,2,3,...).

  3. Wyłącz minutnik.

    Jeżeli licznik czasu nie jest już potrzebny, gdy np. użytkownik ukończył grę, można go wyłączyć. Aby to zrobić, wystarczy zadzwonić do stopTurnTimer().

  4. Przyspiesz lub zmień timer.

    W niektórych grach wydarzenia stale przyspieszają, więc wygodnie byłoby przyspieszyć nasz timer (skrócić czas między rozmowami). Nie ma nic prostszego: zadzwoń setTurnTimer(int timeMs)ponownie, z nową wartością, a czas pomiędzy połączeniami onTurn()ulegnie zmianie.

Przykład:
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);

        }
    }}
W tym prostym przykładzie utworzyliśmy pole komórek 3x3. Następnie włączyliśmy timer, który będzie wywoływał metodę co pół sekundy onTurn(). Co pół sekundy zmieni się kolor komórki, ale jej zawartość nie ulegnie zmianie. Po 50 sekundach kolor przestanie się zmieniać. To wszystko! Jeśli chcesz dowiedzieć się więcej o sekcji Gry, oto przydatna dokumentacja, która może Ci pomóc:
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION