Game
/ tag : xna , zizp , game
このエントリはXNA Game Studio Express beta2 で確認した動作について記載されているため
古いです。
最新の XNA 環境で動作する Ziz Puzzle については
XNA タグから情報を検索してください。
Ziz Puzzle on XNA の XNA Game Studio Express beta 2 対応版を作成しました。
beta1 に作成したバージョン ではいくつか処理がうまくいかなかった部分があったのですが、今回のbeta2 ではそれらについて動作することが確認できました。
- マウスクリックの検出
beta1 では Mouse.GetState(); を使用してダブルクリックの用にマウスを素早くクリックすると二回目の検出に失敗していたのですが、今回のバージョンでは検出できるようになっていました
- 音楽関係
BGM 再生がうまくいかなったことがあったのですが、今回の版のヘルプを見たところ cue オブジェクトを使用して再生状態を管理するようになっていたので、処理を変更したところ正常に動作しました
- gameTime
beta1 の頃はフレームレートの算出に windows の System.Environment.TickCount を使用していましたが、今回加わった gameTime で代替えできるようになりました。
- グラフィックリソース読み込み
Content Pipeline を使用して読み込むように変更しました。
beta1 では足りない部分は windows のオブジェクトで代替えしていたのですが、今回の版でなんとなく依存っぽい処理がなくなったような気がするので、360 でもわりに似たコードでイケるんじゃないかという機運が僕内で高まりました。
まあ 2D ゲームですからどんな環境でもそれほど大きな差がでないかなーとかそんな気もしないでもなかったり。ともあれ、ソースは以下です。
実行ファイルのみを収録したバイナリファイル版は、XNA Game Studio Express beta 2 をインストールしなくても下記の URL からファイルをダウンロードしてインストールすれば動くかもしれません。
しかし当方イケてるグラフィックカードをもつマシンを 2 台所有する環境を持ち合わせていないため、動作について未検証なのです。動かなかったらごめんなさい。
ソースについてのお約束
なにぶん delphi で思いつくがまま MainForm (だけ!) に書き連ねていったコードをベースにほとんどそのまま移植したため、とりあえず動くようにはなっているもののマジックワードありまくりでとんでもなく汚いコードです。我ながらこれはかなりひどい。こりゃ資料にもなんないよなあ。
なんというか「とりあえず動く」状態なので、目下のところ僕の主な目的は、これをいかに今風に書き直すかです。
ごめんね。
ゲームについて
でもって、ゲーム側にも実は結構手を入れました。というかソースを beta1 から beta2 にする時間よりこちらの方に時間を掛けていたりして。
- 表示ブロックの変更
コの字型ブロックと 1 ブロックの形を変更しました
- ブロック消去時のゲージ動作を変更
ゲージは完全停止ではなく、ゲージがゆっくりになるように変更しました
- 4 レベルごとのゲージの動きを変更
ゆっくりになるように変更しました。
- 強制レベルアップ時の出現ブロックを変更
縦 2 ではなく横 2 ブロックになりました
- 音楽の変更
短いフレーズの繰り返しにした代わりに曲数を増やしました
- 右側のアナログスティックに対応
ウエイトなしでゆっくり動きます
- ブロック消去中表示
消える間際は半透明で表示するようにしました
- ブロック消去演出
ちょっと派手にしました
- 終了キーの変更
XNA のテンプレートに
// Allows the default game to exit on Xbox 360 and Windows
みたいなコメントをわざわざ入れられちゃって、 esc キーと コントローラーの back ボタンを終了ボタンに割り当てられたので、やむなくTitleに戻るコントローラーのボタンを back キーから LB と RB の同時押しに変更しました。
個人的には back で終了の live arcade ゲームをプレイした覚えがないので、こういう配置はどうかなと思ったりもしますが……
わりと根本的な部分に手を入れたので、気分的には Version 1.1 ぐらいの感じです。
beta2 感想
まずはなによりドキュメントが充実してきたのが嬉しいところですね。360 関連の処理が見えてきたのも「いよいよ」という感じです。細かい部分についてはあとで別エントリで書きたいと思います。