IKADIUSとかイカディウスとかを公開しました
前回の記事で書いたとおり、IKADIUSを公開いたしました。以下からどうぞ。
http://kagamin.net/hole/ikadius.htm
経緯などはリンク先を見ていただくとして、ここではちょっと技術的な話とかを書いておきます。
まず、元のコードがmin-camlであり、それをWindowsに移植するということで、どうすれば作業量を減らせるかという点から始まりました。
そこで、Microsoftが今一押しの関数型言語、F#がOCamlの上位互換であり、一方OCamlはmin-camlの上位互換であるため、このF#を使えば容易に移植できるのではないか?と考えました。
結果としては、確かにF#はOCamlの上位互換なのですが、追加でPowerPackというのを導入しないと完全互換というわけにはいかず、やや手間でしたが、まあ概ねコアロジックの移植は良好に進みました。
しかし、F#からDirectXやらなにやらを呼んで描画とか入力を処理させるのも面倒だったので、そのあたりの処理は全部C#で書き、F#と連携させれば楽じゃね?と思い、そのようにしました。F#とC#の連携はVisualStudio2010になってますます強化されており、プロジェクトを参照するだけで容易にお互いのクラスや関数にアクセスでき、連携は非常にスムーズにいったと思います。
で、C#側でのグラフィックスなどの処理は全部SlimDXを使いました。いまどき、C#でゲーム開発といったらXNAを使うのがスタンダードらしいのですが、なんとなく使いたくなかったので、C#からDirectXを操作できるSlimDXというライブラリのお世話になることに。ManagedDXの開発は終了し、XNAに引き継がれてしまったので今はもっぱらSlimDXが流行のようでした。
以上のような構成で公開したわけですが、公開してから起動しないという報告が多数寄せられました。
色々と調査したところ、SlimDX.DLLをプログラムのディレクトリを同じ場所に置くとうまいこと動く、ということがわかったのでそうしました。これは、開発側のSlimDXのバージョンと当初公開していたSlimDXのランタイムのバージョンが一致していなかったため、起動しなかったのではないかと考えられます。(ただ、最新のSDKを使っても、同じ場所におかなかった場合、起動に失敗したという事例もあるのでこの点に関してはあまり確証が無いです)
とりあえず、今回のプログラムを作るにあたって感じたことは、
- 動作確認は入念に
- SlimDXは良い子
- .NET Frameworkは確かに強力
ってところでした。