Managed DirectX で作成した MDXGame クラスの検証を兼ねて、XNA Gameクラスを基盤として作成したミコソフトスライドショーXを MDXGame クラスへ移植しようと作業を開始したものの、キーボードやマウスの状態入力用に KeyboardState構造体とMouseState構造体を追加作成した方が良いことに気づき、一旦作業を中断しする事にした…というのが、昨日までのお話しです。
さて、その後のお話しですが、KeyboardState構造体とMouseState構造体の追加作成時に、ちょっと面白いことがありました。
MouseState構造体の方は、特に問題なく作成できたのですが、KeyboardState構造体の作成時に問題発生です。
どういう問題化と言うと、XNA Framework の KeyboardState構造体のドキュメントを読んでみると、何とメンバ変数が無いではありませんか!
もちろん無いはずがありません。
単に隠蔽されているだけということです。
となると、互換性のある構造体を作成するためには、どのように実装されているのかを推理しなくてはなりません。
そこで、KeyboardState構造体のプロパティやメソッドから必要な要件を考えると、全てのキーコードに対応したUp/Down情報を保持するデータをメンバとして持っている必要があります。
単純に考えれば、Up/Downの情報を保持する256個の配列を内部に定義すれば良さそうに思えますが、C#の構造体の場合、その仕様上メンバとして配列を持つことができません。
しかし、256個のint型やbyte型メンバを定義するというのもナンセンスです。
要は、256個のオンオフ情報さえ保持できれば良い訳です。
そうであれば、256ビット…つまり4個のlong型変数を非公開メンバとして実装すれば、要件を満たすことが可能です。
実装方法さえ決まれば、あとは、それに合わせてプログラムを書くだけです。
キーコードを4つの範囲に分けて、それぞれの範囲に対応する変数毎にビットシフトしてオン・オフ値にアクセスするという、少々面倒なプログラムになったため、コーディングに若干の時間はかかりましたが、とにかく問題を解決することができました。
とまあ、昨日はこんな感じで見込みよりもちょっと遅れてしまいました。
が、
とりあえず、割り込み作業も終えたことですし、気合を入れて作業再開です!