SlimDXを使ってみよう^^
64Bitのパソコンを使っているのだが、C#のExpressEditionでMicrosoftDirectXを使おうとしたところエラー発生!!!!原因はMDXは64ビットには対応してないとのこと・・・orz
調べてみると、64bitPCで開発環境を32bitにすればいいらしい・・・!!!!だが、これの設定変更は、ExpresEditionではできない><残念!!
ということで、他のライブラリを探すことになり調べてみると・・・
MDX(MicrosoftDirectX)は開発終了をしていて、これ以上このライブラリを使用してのアプリケーション開発を推奨していないので、ちまたで流行のSlimDXを使用していこうと思う!
①SlimDXダウンロード
とりあえず、
SlimDXでSDKをダウンロードして、インストールする。
②SlimDX.DirectInputでKeyboard入力!
とりあえず、SlimDXについてきたサンプルプログラムを参考に書いてみた。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SlimDX; //1
using SlimDX.DirectInput; //2
namespace SlimDXtest
{
public partial class Form1 : Form
{
Keyboard keyboard;//3
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DirectInput dinput = new DirectInput();//4.make sure that DirectInput has been initialized
keyboard = new Keyboard(dinput); //5.create the device
keyboard.Acquire();//6.入力デバイスへのアクセス権を要求します。
timer1.Start();//7. タイマースタート
}
//8.timerのコンポネート追加
private void timer1_Tick(object sender, EventArgs e)
{
KeyboardState state = keyboard.GetCurrentState();//9.キーボードの状態取得
//10.label1に状態表示
StringBuilder data = new StringBuilder();
foreach (Key key in state.PressedKeys)
data.Append(Enum.GetName(typeof(Key), key) + " ");
label1.Text = data.ToString();
//11.実質的にしたい処理を記述する!
if (label1.Text=="UpArrow ")
{
MessageBox.Show("UpArrow");
}
if (label1.Text=="DownArrow ")
{
MessageBox.Show("DownArrow");
}
if (label1.Text == "RightArrow ")
{
MessageBox.Show("RightArrow");
}
if (label1.Text == "LeftArrow ")
{
MessageBox.Show("LeftArrow");
}
Application.DoEvents();//12.画面の更新
}
//13.フォームを閉じたときの処理を追加
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
timer1.Stop();//14.タイマーストップ
//15.メモリ開放処理
if (keyboard != null)
{
keyboard.Unacquire();
keyboard.Dispose();
}
keyboard = null;
}
}
}
ウィンドウアプリケーションでプロジェクト作成して、上のように1から15までを記述して動くことを確認!!
しかし、どうしても直接 KeyboardState の内容を比較することができない。たとえばこんな感じ・・・
if (state.PressedKeys[0]==SlimDX.DirectInput.Key.UpArrow)
{
//処理
}
おそらく、NULLのときエラーを吐いているから、try・catchで例外処理をすべき?よくわからないからサンプルプログラムをほとんど流用してラベルに書かれた文字を比較することで、キーボード入力ごとの処理ができるプログラミングが一応かけた。
※だれかシンプルに書ける方がいたらアドバイスください!!!!
- if (state == null) { return; } -- 名無しさん (2011-08-02 13:52:18)
SlimDXでジョイパッド入力!
まだ・・・
最終更新:2011年08月02日 13:52