2006-04-30

Nao_u2006-04-30

Google Mapsでフライトシミュレータごっこ Google Mapsでフライトシミュレータごっこ - Nao_uの日記 を含むブックマーク はてなブックマーク - Google Mapsでフライトシミュレータごっこ - Nao_uの日記 Google Mapsでフライトシミュレータごっこ - Nao_uの日記 のブックマークコメント

最近、自宅サーバ用の静音PCを購入した。せっかくの休暇で時間もあるし、環境も整えて仮ドメインも取得したので、今週はGoogle MapsAPIで遊んでみていた。

とりあえず現時点までの成果:

カーソルキーを移動に使っているため、ある程度ウインドウを広げないとスクロールバーが出て画面が動いてしまうので注意。基本的なGoogle Mapsの機能はそのまま持っているので、表示倍率の変更や、好きな場所に移動してから飛び始めることもできる。そこそこ早いマシンでないとちょっと重いかも。それにしても実写背景は楽しい。こういうリソースが無料で使えるなんて、いい時代になったものだと思う。

横須賀からスタートの方は、最大倍率まで上げてからスタートするとちょっとだけバンゲリングベイ気分が味わえて楽しいのだけど、その解像度だとスクロールが早すぎてマップ表示がついてこないのが残念。速度にあわせてリアルタイムでスムーズに倍率が変えられたりすると、もっと楽しいんだけどなぁ・・・。

JavaScriptの勉強を兼ねて作ってみているので、どこかで見たようなネタと被っていたり、一部おかしいところなどがあるのはご容赦願いたい。HTMLやCSSに関してもほとんど無知な状態からはじめているので、解決方法のわからない問題が多い・・・。

あと、一応製作過程についての事など。

プログラムそのものよりも使っている絵の準備の方がずっと大変だった。こういった素材をちゃんと用意するのも久しぶりなので、どういったツールや素材をどのように使うのかの試行錯誤からはじめなくてはならなかった。いろいろ試してみた結果、今回はこちらのサイトにある飛行機や車のモデルをこちらのビューワーで表示したものをキャプチャーし、Gimpスクリプトを書いて加工し、32方向に回転したものを使用することにした。

レンダリングした絵をゲームに使うのは始めての経験なのでいろいろと面白かったものの、想像以上に手間がかかってしまい、飛行機の左右バンクの7パターンの絵を描くだけで試行錯誤も含めてほぼ丸一日が潰れてしまった。それだけ苦労して作った絵だけど、いろいろと問題も多い。

まず、最終出力が20*20ドットしかないためにレンダリング画像をそのまま縮小すると陰影が消えて灰色一色のシルエットしか見えない。仕方がないので、レンダリング後の絵に一枚一枚レタッチを施して機体の形状が見えやすいように加工することにした。

そうやって作ったドット絵も、自機として画面中央に固定表示している分にはいいのだけど、同じ絵を敵機として動かしてみると、荒いスクロールの中では視認性が悪く、この素材で空対空のゲームを作るのはちょっと無理があるような状態になってしまっている。かといってもう一度素材を作り直すのはとても大変。そもそもサイズが小さすぎるのも問題かもしれない。

できればロール・ピッチ・ヨーのパターンをそれぞれ16方向分用意して、表示は2Dだけど中身はちゃんと3次元で計算されているフライトシミュレータもどきを作ってみたかったのだけれど、絵の出力を自動化する効率的なやり方が見つからなかったのと、最終的に4096パターンもの絵が必要になって画像の転送量も馬鹿にならないため、もう少しいい方法が思いつくまでは保留とすることにした。今後のためにも、お手軽に素材を量産する手法を確立しておきたいところではある。

また、Gimpを本格的に使うのは初めてだったのだけど、スクリプト言語Schemeを使っているのがちょっと面白かった。ただ、Photoshopにくらべてなんとなく使いにくい上に、頻繁にアプリケーションごと落ちてしまうために作業効率はよくない。無料でここまで使えるものに文句を言うのもよくないのかもしれないけど。

あと、JavaScriptの描画が意外と重い。3GHzのCPUを使っているにもかかわらず、目算で15~20fps程度の描画でも、30枚くらいスプライトを出すと顕著に処理が重くなっているのが分かる。V30・286世代のPC-98で作っていた頃を思い出す。せっかくだからもう少しゲームっぽいものを作ってみようかと思って描画を軽くする手段はないかといろいろ試してみているところなのだけど、スムーズな動きを求めるのはあるていど諦めた方が良さそう。でもまぁ、制限があるほうが手を抜きやすい、というメリット(?)もあるのでもうしばらくはこれで遊んでみたいと思う。