ゲームプログラミング

ガベージコレクションがちょっと心配

ActionScriptはおもしろいね。

第一作目のゲームは、アクションゲームにタワーディフェンスの要素を
取り込んだシステムを考えてます。

System

で、これが試作・・・?

Flashで動くのは、こっち。
http://www.sousakuba.com/SengokuProject/20100913.html


1000対1000の大規模合戦を再現したいのですが、
キャラクターのメモリ生成と開放がとんでもない数になりそう。

ガベージコレクションが悪い方向に働かないか心配です。
根拠ないけど。

念のため、使いそうな分のメモリをあらかじめ確保しておいて
開放させずリサイクルしながら使うことにしました。

GCの影響は減ると思うんだけど、もしかして無意味かな。


ところでアクションスクリプトってArrayしかないのね。
連結リストみたいなのを、自分で作る羽目になった。

ActionScriptでFlashゲームを作る(2)

ActionScriptまたふたつおぼえた。

ActionScript 画像の拡大と回転
ActionScript MD5でパスワードを暗号化する


 ハイスコアをサーバーに登録したくて暗号化とか勉強してます。
 MySQLもおぼえなきゃ。


ActionScriptのデバッガがほしいなーと思ってたところ、FlashDevelopなるツールを発見!!!
http://flashdevelop.jp/

すごくよさげ。
デバッガだけでなく、入力候補の表示機能まで備えてる。

つかいこなしてみたい。

ActionScriptでFlashゲームを作る

覚えやすさと作りやすさから、1作目のゲームはActionScriptを使ったブラウザゲームにしよう思います。

ということで方向転換。
Direct3Dはあとまわし。
むずかしいんだもん。

ActionScriptの機能。新らしくふたつおぼえました。
ActionScript リンクボタンを作る
ActionScript SharedObjectでデータを保存する

SharedObjectを使ったデータのセーブは簡単だけど確実に改ざんできますね。
保存されたファイルをバイナリエディタで見たら、プロパティの名前が丸見えでした。

暗号化や他の手段を調べてます。

ゲームのための弾道計算

ゲームプログラミングで弓とか大砲とかの「まっすぐ飛ばない弾を」表現するのに弾道計算が必要になりました。
弾道計算といってもそんなたいした物でなく重力だけ考慮した単純な放物線軌跡です。

ベクトルを使うと簡単に計算できましたよ。

重力ベクトルを足し続けるだけで軌跡が得られるので、数学的に三角関数で解くよりもずっと軽く、早くできます。
ベクトルは当たり判定にも活用できますね。

米軍がPS3を大量購入したニュースがありましたけど、その理由がベクトル演算が得意だったからと、どこかで読んだ記憶があります。
ベクトルすごい。大活躍。

ところで、弾道計算って軌跡を求めるだけじゃ済まなかったのですよ。

当てないといけないんです。

これが大変でした。
物理の公式思い出しながら脳みふり絞ってプログラミングしてみたらいい感じに動いてます。

よかった。

dandou_app

プログラムはこちらで紹介してます。
http://www.sousakuba.com/Programming/algo_dandoukeisan3.html

発射角の計算には三角関数とかルートとかを使います。
計算効率に疑問が残りますが、もしかして発射角もベクトルで簡単に求まったりするのかな?

カメラ制御に悩む

戦国無双みたいな「プレイヤーの背中を追いかけていくカメラ」に挑戦です。

カメラの回転をかっこよくクォータニオンで実装したかったのですがクォータニオンをいまいち理解できません。

カメラのヨーピッチロールの各軸回転を飛行機みたいに「前回の姿勢からの差分」で行いたいのですが、
差分合成するクォータニオンはそのときどきの姿勢に合わせた軸を3つ用意しないと作れない気がします。

うーん。軸の生成が手間だと思うけど気のせいでしょうか。
それをするだけの見返りがクォータニオンにあるのかな。

ワールド座標軸からのヨーピッチロールのクオータニオンをひとつ作って掛け算していけば飛行機みたいな回転もできる。
当初そう思ってたのですけどそんなに甘くなかったですね。

軸を考えず作ってみたらそのままワールド基準で回転してました。
これは都合悪い。

結局、回転はオイラー角で実装しました。
オイラー角の方がずっと理解しやすいです。
差分は現在の値に足すだけだし行列はDirectXにつくってもらえるし。

いづれジンバルロックとかに苦しむのかなー。

とりあえず一番の目的だったプレイヤーの背中を追いかけるカメラができました。

cam_app

サンプルはこちら。
ビューとプロジェクション行列についても少しまとめてみました。
http://www.sousakuba.com/Programming/d3d_camera.html

livedoor プロフィール
  • ライブドアブログ