CodeGym /Java Blog /ランダム /CodeGym のゲーム セクション: イベント処理
John Squirrels
レベル 41
San Francisco

CodeGym のゲーム セクション: イベント処理

ランダム グループに公開済み
CodeGym の「ゲーム」は、人気のあるゲームの独自バージョンを作成する、大きな興味深いタスクを含む新しいセクションです。それは簡単です。各ゲーム プロジェクトはサブタスクに分割されています。それらを一つずつ完了させればゲームは完了です。ソーシャルネットワークで共有したり、友達を招待してプレイすることができます。この記事では、ゲームの作成に使用されるイベント処理CodeGym の「ゲーム」セクション: イベント処理 - 1メソッドについて詳しく説明します。

1. マウスの操作

ゲーム エンジンには、マウスを操作するための 2 つの方法があります。
  • 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.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. キーボードの操作

ゲーム エンジンには、キーボードを操作するための 2 つの方法があります。
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);

ユーザーがキーを押したときに何かを実行したい場合は、Game を継承するクラスでこれらのメソッドを宣言し、コードをそれらに追加します。ユーザーがキーを押すか離すと、ゲーム エンジンがそれらを呼び出します。
  1. onKeyPress(Key key)— 任意のキーが押されたときに呼び出されます。key パラメータは押されたキー (または Key.UNKNOWN) です。

  2. onKeyReleased(Key key)— キーが放されたときに呼び出されます。key パラメータは、対応するキー (または Key.UNKNOWN) です。

これらのメソッドの使用例を次に示します。

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);
        }
    }
}
重要! ゲーム エンジンの現在のバージョンでは、キー タイプには次の 9 つの値の限られたセットがあります。
価値 ユーザーが押したキー
Key.ENTER ユーザーが Enter を押しました
Key.ESCAPE ユーザーが Esc を押した
キー.一時停止 ユーザーが一時停止を押しました
キー.スペース ユーザーがスペースを押した
Key.LEFT ユーザーが左矢印キーを押した
Key.RIGHT ユーザーが右矢印キーを押した
キー.UP ユーザーが上矢印キーを押した
キーダウン ユーザーが下キーを押しました
キー.不明 ユーザーが上記以外のキーを押した

3. タイマーの操作

多くのゲームはリアルタイムで発生します。つまり、ユーザーが何もしなくても、ゲーム内でイベントが発生します。このようなゲームを実装できるようにするために、ゲーム エンジンにタイマーを追加しました。これは次のように機能します。タイマーをオンにしてタイマー間隔を設定します。たとえば、500 ミリ秒です。その後、ゲーム エンジンは 0.5 秒ごとにonTurnTimer()メソッドを呼び出します。タイマーがオフになるまで、何度も何度も永遠に。では、タイマーはどうやって使うのでしょうか?
  1. タイマーをオンにします。

    これを行うには、特別な方法があります。このメソッドは引数として呼び出し間の間隔をミリ秒単位で受け取ります (1 ミリ秒 = 1/1000 秒)。これを呼び出す必要があるのは 1 回だけで、ゲーム エンジンはtimeMs ミリ秒ごとにメソッドの呼び出しを開始します。void setTurnTimer(int timeMs)onTurn()

  2. onTurn(int) メソッドをオーバーライドします。

    これを行うには、を継承するクラスでメソッドを宣言する必要があります。このメソッドはゲーム エンジンによって呼び出されます。さらに、呼び出しごとに、ゲーム エンジンは呼び出しの連続した識別子 (1、2、3、…) をメソッドに渡します。void onTurn(int step)Game

  3. タイマーをオフにします。

    ユーザーがゲームを完了したときなど、タイマーが不要になった場合は、タイマーをオフにすることができます。これを行うには、メソッドを呼び出すだけです。stopTurnTimer()

  4. タイマーを加速するか変更します。

    一部のゲームでは、イベントの発生速度が常に加速しているため、タイマーを速くする (呼び出し間の時間を短縮する) と便利です。setTurnTimer(int timeMs)これほど簡単なことはありません。新しい値を指定してもう一度呼び出すと、onTurn()呼び出し間の時間が変わります。

例えば:

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);

        }
    }
    …
}
この簡単な例では、3 セル x 3 セルのフィールドを作成しました。onTurn()次に、 0.5 秒ごとにメソッドを呼び出すタイマーを開始しました。0.5 秒ごとにセルの色が変わりますが、その内容は変わりません。50秒経過すると色は変化しなくなります。それは今のところすべてです!「ゲーム」セクションについて詳しく知りたい場合は、次の役立つドキュメントを参照してください。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION