« C# でマウスジェスチャを実現するクラス | メイン | PInvokeとポインタの落とし穴 »

2006年04月12日

C#でDirectXプログラミング [C#]

DirectX SDKを使って何か簡単なゲームプログラミングでもやってみようかと思った。今までゲームといっても既存のエンジンを使わないものは Windows フォーム上か HTML 上でしか作ったことが無いので、本格的に作るならやっぱり DirectX を使わざるを得ない。

しかし色々なドキュメントを見てみたところ、ちょっと一日二日ではマスターできる内容ではないことに気がついた。そこで見つけたのが DXライブラリ だ。このライブラリは、簡単に画像を描画したりパッドの入力を捕捉したりできる関数が沢山用意されている。

だが、問題はこのライブラリは C++ 用であるということだ。私は C から C# に飛び越えて覚えたたちなので、C++ でほとんどアプリケーションを作ったことがない。慌てて C++ 関連のサイトを回って覚えることにした。学んでいくうちに。C++ は C と大して変わらないんだろうという予想を裏切り、意外と C++ は便利であることに気がついた。特に標準ライブラリが充実している。C#2.0 のジェネリッククラスに相当するオブジェクトがすでに存在していたことには驚いた。もしかして C++ って Java なんかよりずっと便利なんじゃなかろうか。

とはいえ私にとってやはり C# のほうが圧倒的に扱いやすい。C++ で簡単なクラスを組んでいくうちに、あっという間に躓いてしまった。Windows フォームのようなインタフェースで DirectX 上の Shape を扱うクラスを作っていたのだが、どうにもクラス間で相互参照しあうとコンパイルがうまく通らない。解決方法もさっぱりわからない。

やっぱりどうせ作るなら C# でやりたい。幸い、DXライブラリを DLL 化したもの(ActiveBasic向けだが)が配布されていたので、それを使うことにした。System.Runtime.InteropServices.DllImport 属性を使ってアンマネージドなDLL呼び出しを行おうというわけだ。もっと上手い方法があったかもしれないが、私の知識ではこれが限界だった。

このような経緯で、現在 Dxライブラリの C# でのラッパクラスを作成中である。ただ委譲するだけではつまらないので、System.Drawing 名前空間のいくつかの構造体を使ったり、 構造化例外処理を付け加えてみたりした。まだ3割がたしかできていないが、数日後には公開できそうである。一応 C#2.0 上で組んでいるが、1.1 でも動くようにするつもりだ。

投稿者 : 16:03 | コメント (0) | トラックバック (0)

トラックバック

このエントリーのトラックバックURL:
http://totora.jpn.org/mt/mt-tb.cgi/123

コメント

コメントしてください




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)