CodeGym /Java Blog /Acak /Bagian game di CodeGym: Penanganan acara
John Squirrels
Level 41
San Francisco

Bagian game di CodeGym: Penanganan acara

Dipublikasikan di grup Acak
"Game" dari CodeGym adalah bagian baru dengan tugas besar yang menarik di mana Anda membuat versi game populer Anda sendiri. Sederhana saja: setiap proyek game dibagi menjadi beberapa subtugas. Selesaikan satu per satu dan permainan selesai. Anda dapat membagikannya di jejaring sosial dan mengundang teman Anda untuk bermain. Bagian "Game" di CodeGym: Penanganan acara - 1Pada artikel ini, kami akan menjelaskan secara detail metode penanganan event yang digunakan untuk menulis game.

1. Bekerja dengan mouse

Mesin game memiliki dua metode untuk bekerja dengan mouse:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);

Anda cukup mendeklarasikan metode ini di kelas Anda yang mewarisi Game, dan menambahkan kode apa pun yang Anda inginkan. Mesin game akan memanggil mereka saat pengguna mengklik tombol mouse.
  1. onMouseLeftClick(int x, int y)— dipanggil oleh mesin saat tombol kiri mouse diklik. Parameternya adalah koordinat sel lapangan permainan tempat klik terjadi. Sel kiri atas memiliki koordinat (0, 0). Anda perlu mengganti metode ini untuk menggunakannya.

  2. onMouseRightClick(int x, int y)— dipanggil saat tombol kanan mouse diklik. Metode ini bekerja seperti onMouseLeftClick(int x, int y)metode.

Berikut adalah contoh penggunaan metode ini:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        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) {
        // Set "X" in the cell where the left mouse click occurred
        setCellValue(x, y, "X");
    }

    @Override
    public void onMouseRightClick(int x, int y) {
        // Clear the cell where the right mouse click occurred
        setCellValue(x, y, "");
    }
}

2. Bekerja dengan keyboard

Mesin game memiliki dua metode untuk bekerja dengan keyboard:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);

Jika Anda ingin sesuatu terjadi saat pengguna menekan tombol, nyatakan metode ini di kelas Anda yang mewarisi Game, dan tambahkan kode Anda ke dalamnya. Mesin game akan memanggil mereka saat pengguna menekan atau melepaskan tombol.
  1. onKeyPress(Key key)— dipanggil saat tombol apa saja ditekan. Parameter key adalah tombol yang ditekan (atau Key.UNKNOWN).

  2. onKeyReleased(Key key)— dipanggil saat sembarang tombol dilepaskan. Parameter kunci adalah kunci yang sesuai (atau Kunci.UNKNOWN).

Berikut adalah contoh penggunaan metode ini:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        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) {
        // When the space bar is pressed, the center cell turns yellow
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.YELLOW);
        }
    }

    @Override
    public void onKeyReleased(Key key) {
        // When the space bar is released, the center cell changes back to white
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.WHITE);
        }
    }
}
Penting! Dalam versi mesin gim saat ini, jenis Kunci memiliki sembilan nilai terbatas:
Nilai Tombol ditekan oleh pengguna
Kunci.MASUKKAN Pengguna menekan Enter
Kunci.ESCAPE Pengguna menekan Esc
Kunci.JEDA Pengguna menekan Jeda
Kunci.SPACE Pengguna menekan Spasi
Kunci. KIRI Pengguna menekan tombol panah kiri
Kunci.KANAN Pengguna menekan tombol panah kanan
Kunci.UP Pengguna menekan tombol panah atas
Kunci.BAWAH Pengguna menekan tombol bawah
Kunci.UNKNOWN Pengguna menekan tombol selain yang di atas

3. Bekerja dengan pengatur waktu

Banyak game terjadi dalam waktu nyata, bahkan jika pengguna tidak melakukan apa pun, peristiwa tetap terjadi dalam game. Untuk memungkinkan Anda mengimplementasikan game semacam itu, kami menambahkan pengatur waktu ke mesin game. Cara kerjanya seperti ini: Anda menyalakan pengatur waktu dan mengatur interval pengatur waktu. Misalnya, 500 milidetik. Kemudian, setiap setengah detik mesin game memanggil onTurnTimer()metode tersebut. Lagi dan lagi selamanya — sampai timer dimatikan. Jadi bagaimana Anda menggunakan pengatur waktu?
  1. Nyalakan pengatur waktu.

    Untuk melakukan ini, ada void setTurnTimer(int timeMs)metode khusus. Metode mengambil sebagai argumen interval antara panggilan dalam milidetik (1 milidetik = 1/1000 detik). Anda hanya perlu memanggilnya sekali, dan mesin game akan mulai memanggil onTurn()metode tersebut setiap milidetik Ms.

  2. Ganti metode onTurn(int).

    Untuk melakukan ini, Anda perlu mendeklarasikan void onTurn(int step)metode di kelas yang mewarisi Game. Metode ini akan dipanggil oleh mesin game. Selain itu, dengan setiap panggilan, mesin game akan meneruskan ke metode pengidentifikasi berurutan untuk panggilan tersebut (1, 2, 3, …).

  3. Matikan pengatur waktu.

    Jika pengatur waktu tidak lagi diperlukan, misalnya saat pengguna menyelesaikan permainan, Anda dapat mematikannya. Untuk melakukan ini, Anda hanya perlu memanggil stopTurnTimer()metode.

  4. Mempercepat atau mengubah timer.

    Di beberapa game, kecepatan terjadinya peristiwa terus meningkat, jadi akan lebih mudah untuk mempercepat pengatur waktu kami (mengurangi waktu antar panggilan). Tidak ada yang lebih mudah: panggil setTurnTimer(int timeMs)sekali lagi dengan nilai baru, dan waktu antar onTurn()panggilan akan berubah.

Misalnya:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {@Override
    public void initialize() {
    	// Create a playing field that is 3 cells x 3 cells
        setScreenSize(3, 3);
        showGrid(false);
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);

        setTurnTimer(500);   // Turn on the timer, the interval between calls is 500ms.
    }

    @Override
    public void onTurn(int step) {
        if(step == 100) {
            stopTurnTimer();  // If 100 calls have been made, turn off the timer
        }

        if (step % 2 == 1) {
            // If this call is odd, set the cell background to red
            setCellColor(1, 1, Color.RED);
        }
        else {
            // If this call is even, set the cell background to blue
            setCellColor(1, 1, Color.BLUE);

        }
    }}
Dalam contoh sederhana ini, kami membuat bidang berukuran 3 sel x 3 sel. Kemudian kami memulai pengatur waktu yang akan memanggil onTurn()metode setiap setengah detik. Setiap setengah detik, warna sel akan berubah, tetapi isinya tidak akan berubah. Setelah 50 detik, warnanya tidak akan berubah lagi. Itu saja untuk saat ini! Jika Anda ingin mempelajari lebih lanjut tentang bagian "Permainan", berikut beberapa dokumentasi bermanfaat yang dapat membantu:
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION