最新の XNA 環境で動作する Ziz Puzzle については XNA タグから情報を検索してください。
ここ数日 XNA 関連のエントリが続きましたが、とりあえず実際になにか組んでみないと雰囲気わからないよね、という感じで Ziz Puzzle を移植してみました。
2P モード、 3 分モードはなく、Nomal とNightmare モードのみです。有線の XBOX 360 コントローラーをつないでいればそちらでもプレイできます。
file
- 配布用 binary file : Ziz01Release.zip (20.9MB)
- Project File (Source File) : Ziz01src.zip (21.7MB)
作成ゲームについて
XNA Game Studio Express (Beta) で作成しています。
ゲームと Sourcefile の Licenseは Creative commons の 帰属 2.1 日本です。
あとやたらファイルサイズがありますがほとんど音ファイルだったりします。
実のところ XNA Game Studio Express が導入されていない環境での配布用ファイルの動作が未検証ですので、これについてはもうちょっと調べてみる予定です。動かなかったらごめんなさい。
一応、資料的には、配布用ファイルを実行するには、.NET Framework Version 2.0 再頒布可能パッケージ、DirectX のランタイムがシステムに導入されている必要があるとのことです。ファイルは WindowsUpdate より入手できると思います。
また、XNAシューティングを配布されているソーサリーフォースさんのリリースを見ると、ビデオカード、またはグラフィックチップセットがシェーダモデルバージョン 1.1 が使用できることが必須とのことです。
気づいたこと memo
- 流れてる music を止めようと cue の stop を試みたけど止まらなかった。こんな感じ。
soundBank.GetCue(fadeOutFile).Stop(AudioStopOptions.AsAuthored);
カテゴリで指定したら止まったので謎です。
audioEngine.GetCategory("Music").Stop(AudioStopOptions.AsAuthored);XACT 関連はまだかなり謎だったりします。いろいろできそうなんだけどなー。 - GetState() で mouse の clickを検出していたのだけれど、Double click のような「その場から動かない素早いclick」をすると、二回目の検出がうまくできなかった。これは xnaspot のサンプルでも同様の現象が確認できました。
MouseState mouseState = Mouse.GetState(); if (mouseState.LeftButton == ButtonState.Pressed)
今回の ziz の場合、click 検出ができないとゲームとして厳しいことになっちゃうので、今回は GetState を止めて System.Windows.Forms.Control.MouseButtons を使っちゃいました。が、これは正攻法ではないと思いますので、回避策がわかった時点で差し替えた方がよさげです。 - XACT を使って ループで音楽を流しながら toggle full screen を実行したら音楽が途切れました。ここらへんのデバイス復帰関連はほど良い資料が見つからなかったので、とりあえず今は情報待ちな気分です。ziz では起動時のコマンドラインオプションで逃げています……。
ソースすげーきたないよ
なにぶん delphi で思いつくがまま MainForm (だけ!) に書き連ねていったコードをほとんどそのまま移植したため、とりあえず動くようにはなっているもののマジックワードありまくりでとんでもなく汚いコードです。我ながらこれはかなりひどい。こりゃ資料にもなんないよなあ。
なんというか「とりあえず動く」状態なので、目下のところ僕の主な目的は、これをいかに今風に書き直すかです。
ごめんね。
よい時代だ
しかしまあこんな風に、なんにも考えないでコード書いてもそれなりに動くゲームがつくれるというのは実によい時代ですね。
ライブラリ的に似たようなことができる環境はいろいろあると思うのですが、やっぱ言語提供元が提供してくれる安心感は大きいです。