2010年07月05日

【プログラム】XNAでゲームを作る(3)

ワールドカップもいよいよ準決勝ですね

さて、今日はキー入力を取得する部分を作成します。
XNAではWindowsとXBox360で動作するため、キー入力の関数として
キーボード、マウス、XBox360コントローラーの3種が用意されています。

DirectInputを使って通常のジョイパッドも扱えるようですが、
ここでは説明しません
わからないので・・・(爆

まずはキーボード入力を作りましょう

1890円〜100GBの大容量。無制限レンタルサーバー【X2】


後にコントローラの入力関数も作る予定ですが、
とりあえずキー入力としてほしい機能をまとめてみました

  1. 1フレーム毎にキー押下状態であることがわかる
  2. 連続して押下状態の場合、規定フレームで情報を取れる
  3. たった今押下状態になった
  4. キーが押下状態ではない

XNAには[ KeyboardState ]型があり、このクラスが1フレームでのキーボードのキー入力状態を管理しています。

KeyboardState kbSt = Keyboard.GetState();

とコードを書くと
kbStの中にキーボードの状態がすべて入ります。

たとえばEnterキーの状態を知りたい場合

if( kbSt.IsKeyDown(Keys.Enter) ){
 // Enterキーが押下されている状態である
}

と書くことができます。

ここで気になるのがキー入力状態。
押下しているかしていないかの bool 型でしか判別できません。

このままif文を駆使すれば簡単なキー入力処理はできますが、
さきほどあげた4項目を満たすことができません。

ということでキーボード入力管理クラスを作ります。

プロジェクトに新しくソースファイルを作ります。

参照設定として以下を登録しておきましょう

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;

まずは状態定義をします。

public interface I_KeyboardButtonState
{
 uint RepeatIntervalCnt { get; }
 bool Repeated { get; }
 bool Pressed { get; }
 bool JustPressed { get; }
 uint PressedCnt { get; }
}

インターフェイスで型を宣言しておきます。
後のクラスで実装するため簡単に説明すると

bool型は以下のような意味をもたせます。


  1. Repeated :押下状態が規定カウントに達した時にTrue
  2. Pressed :押下状態である時にTrue
  3. JustPressed :押下状態になった瞬間の時にTrue

RepeatIntervalCnt は、Repeatedの条件となる規定カウントの値。
ContinueCnt は、RepeatedがTrueになった回数を記録していきます。

これらの情報を実装するクラスでひとつのキー情報を管理していきます。

また、管理するキー情報を定義します。

public interface I_KeyboardState
{
 KeyboardState Previous { get; }
 KeyboardState Current { get; }

 I_KeyboardButtonState ARROW_UP  {get;}
 I_KeyboardButtonState ARROW_DOWN { get; }
 I_KeyboardButtonState ARROW_LEFT { get; }
 I_KeyboardButtonState ARROW_RIGHT { get; }
 I_KeyboardButtonState ENTER   { get; }
 I_KeyboardButtonState SPACE   { get; }
}

Previous :前のフレームのKeyboardState状態
Current :今回のフレームのKeyboardState状態

あとは先ほど宣言したキー管理情報を実装するキーを宣言してきます。
上の例では十字ボタンの上下左右キー、エンターキー、スペースキーを定義しています。

もちろんA〜Zキー、F1〜、数字キー、Numキーなどいろいろ定義はできますので
ご自分の環境にあうキーを定義していきましょう。

これも後に実装するので簡単に。

長くなるので今回はここまで
次回宣言したインターフェイスを実装し、キーを取得、管理するクラスを作ります。

壊れたパソコンが売れる!!
日本最大級のオンライン書店 eBOOKOFF
posted by ヒイロ at 00:18| 福岡 ☁| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック