LoginSignup
0
1

More than 3 years have passed since last update.

ゲームをつくる:Cocosでキー入力とスライダーインターフェイスを実装

Last updated at Posted at 2019-11-01

この記事は、

ヘックス戦略SLGが好きな筆者が、楽しい戦略SLGを自分で作る記録です。

この記事のまとめ

  • Sliderインターフェースの実装をした
  • キー入力インターフェイスの実装をした

こちらから動くものを確認できます。
ヘックスのタッチをどのように検出しているかはこちら

Sliderインターフェースを実装した

カメラのズーム機能をSliderインターフェースで実装します。
Sliderインターフェースは、操作された際にメソッドをコールバックで呼び出してくれるので、
まずそのメソッドをCameraにアタッチしたcc.Componentに作成します。

  // **********************************************************
  // 開発用カメラズーム
  // **********************************************************
  debugCameraZoom(slider) {
    cc.log(slider.progress);
    CAM_M.SetCameraZoom(slider.progress * 4 + 0.55);
  }
}

コールバックにはcc.Sliderのインスタンスが渡されます。
インスタンスのprogressにスライダー状態に応じて0−1の値が入るので、それを元にいい感じでカメラのズームを調整します。

スライダーコンポーネントの設定。

NodeTreeにスライダーコンポーネントを設定して、Slide Eventを追加します。
cc.Nodeの欄に、先程メソッドを作成したコンポーネントが設置されているノードをドラッグアンドドロップ。
右の欄から該当コンポーネントを選択して、更に右の欄で先程作成したコンポーネントを選択して完成です。

キー入力インターフェイスを実装した

キー入力の初期化は以下のような形で行います。イベントが発生すると、登録したコールバックが呼ばれます。

    // キー入力を検出
    cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, KEY.onKeyDown);
    cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, KEY.onKeyUp);

コールバックメソッドはこんな感じ。

  // *******************
  // キーを押したとき
  // *******************
  static onKeyDown(event) {
    KEY.setKeyFlag(event.keyCode, true);
  }

  // *******************
  // キーを離したとき
  // *******************
  static onKeyUp(event) {
    KEY.setKeyFlag(event.keyCode, false);
  }

 // *******************
  // キーのフラグをセットする
  // *******************
  static setKeyFlag(keyCode, bool) {
    switch (keyCode) {
      case cc.macro.KEY.up: // 上
      case cc.macro.KEY.w:
        if (bool === true) {
          KEY.resetDirectFlag();
        }
        KEY.up = bool;
        break;

      case cc.macro.KEY.down: // 下
      case cc.macro.KEY.s:
        if (bool === true) {
          KEY.resetDirectFlag();
        }
        KEY.down = bool; break;

      case cc.macro.KEY.left: // 左
      case cc.macro.KEY.a:
        if (bool === true) {
          KEY.resetDirectFlag();
        }
        KEY.left = bool;
        break;

      case cc.macro.KEY.right: // 右
      case cc.macro.KEY.d:
        if (bool === true) {
          KEY.resetDirectFlag();
        }
        KEY.right = bool;
        break;
    }
  }

  // *******************
  // 方向フラグをリセット
  // *******************
  static resetDirectFlag() {
    KEY.up = false;
    KEY.down = false;
    KEY.left = false;
    KEY.right = false;
  }

KeyFlagをセットしておいて、色々なキー入力に関して処理を行います。
複数の方向入力を受け付けないような処理にしています。
カーソル入力の他に、wasdでも動くようにしました。

後は、コンポーネントの中のupdateで、毎フレーム必要な処理を書きます。

static update(dt) {
    if (KEY.left) {
      CAM_M.MoveCamera(-MOVE_SPEED * dt, 0);
    }
    if (KEY.right) {
      CAM_M.MoveCamera(MOVE_SPEED * dt, 0);
    }
    if (KEY.down) {
      CAM_M.MoveCamera(0, MOVE_SPEED * dt);
    }
    if (KEY.up) {
      CAM_M.MoveCamera(0, -MOVE_SPEED * dt);
    }

  }

次はヘックスに地形と地形パラメータをセットしようと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1