Flex 3の練習がてら、Adobe AIR向けに伝統的コンピュータゲームであるpongの劣化版を製作してみました。折角なんでソースコードおよびバイナリを公開しておきたいと思います。
以下にソースコード、AIRパッケージを示します。UNIX互換系ならばmakeでいけるかと思います。途中自己署名のためパスワードを2度要求されますが、両方同じ適当な文字列を入力してください。
- pong-air.tar.gz
- (ソースコード, tar+gz, 30,589byte, SHA1 : 3b27215e214c255e8700ff17938ca5609c4c835f)
- pong.air
- (AIRパッケージ, 281,379byte, SHA1 : 4ff9b4905c6209322caad6a35fda2e4b0a5c8207)
左のバーがプレイヤー、右のバーがコンピュータです。↑キーで上へ、↓キーで下へ移動出来ます。
得点・勝敗判定ありません。コンピュータ側は確実に失敗しません。そういった点でゲームとしては成り立ちませんので、むしろ一種のサンプルやバリエーションとしてお考えいただければ幸いです。
また当環境では、自機の操作中、各オブジェクト(ボールやバー)の動作が遅くなる現象が確認されています。現在原因不明なため、わかり次第追記します。
実装についての解説
このAIRアプリケーションは単一SWF"pong.swf"のみからなっています。またこのSWFは"pong.mxml"により生成されています。
さらにpong.mxmlについて見ていきます。特徴はUIコンポーネント系のタグが1つもないこと、WindowedApplicationタグのlayout属性がabsoluteになっていることです。
単なるグラフィックスでしかない為、ボールやバー、コートはUIComponentのインスタンスで表現しています。一方、UIComponentはMXMLタグで記述出来ない為、applicationCompleteイベントのハンドラ、applicationCompleteHandlerメソッドで生成しています。さらに、今回はボールやバーなど、座標を特定出来るオブジェクトにする必要がある為、absolute指定となっています。
このゲームでは、ゲーム制作では常套手段となっている、フレームベースの制御を行っています。具体的にはflash.utils.Timerを使い20msごとにイベントを発生させ、そのハンドラであるmovingメソッドでフレーム計算を行っています。
その他
元来FlexやMXMLはUIを開発する為の技術ですので、不得意とすることを無理矢理やらせて見た形です。しかし実際のところ、このアプリケーションそのものはつまらないゲームでしかありません。もっともそれは私がブラッシュアップしていない為なのですが...
FlashはWeb上のミニゲームで多くの実績があります。ですが現在、AIRのゲームは(例えば点つなぎオンラインやAdobe AIR Marketplace Games)少数しか確認しておりません。これはAIRプラットフォームそのもの、そのコミュニティ全般やゲーム開発コミュニティが成熟していないことが原因の一つにあるような気がします。AIRでは既存SWFをそのままデスクトップアプリケーションへ持ってくる事が出来ますが、それだけではAIRという価値を発揮出来ないと思っています。
ブラウザからデスクトップへ、というのは重大な変化です。現在各所でAIRによるWebアプリケーションのフロントエンドが開発されていますが、これらはそのWebアプリケーションが、ブラウザでは不便に感じるような規模に成長した為であると思います。
一方ミニゲームの場合、それそのものが一般的に小規模、やりたいときに開いて少し遊ぶといった形かと思います。このようなアプリケーションの場合、ダウンロードし、ゲーム用の記憶領域を確保してまでプレイしたいのか、という事が問題になります。そして、それこそがFlashのミニゲームを単純にAIRに持ってくる事が出来ないと思う理由です。
ただし、Flashそのものに、例えば最先端3Dゲームのようなキャパシティはありません。しかし、BlazeDSのプッシュ配信、AIRではローカルファイルの読み書きなど一定の環境が整っています。ですのでビジュアルで魅了するのではなく、しかしシンプルに遊ぶのではない、やり込める中規模ゲームが向いているように思います。
もっとも前述の通り、まだまだAIRが成熟しておらず、独自のノウハウは十分に蓄積されたとはいえません。またFlashについてもWebプラグインの時代が長く、Webブラウザという前提や先入観が拭いきれていないのが現状だと思います。
しかも現在では、何かをするには何々という開発環境、ということはなく、各開発環境で殆ど何でも出来るようになっています。つまり無理にAIRを選ぶ必要は無い、代替はいくらでもある、 ということです。そしてプラットフォームの進化の方向は、それを使用するカスタマーにより左右されることと思います。
ですので、今回はゲームについてでしたが、それに限らず色々なAIRのバリエーションが出てくる事を期待しています。そしてより盛り上がり、浸透したプラットフォームへと成長してほしいなと思います。
カテゴリ
トラックバック
このブログ記事を参照しているブログ一覧: Flex 3 SDKで"pong"もどきを作りつつ、AIRでのゲームについて考えてみた。
このブログ記事に対するトラックバックURL: http://www.memorize-being.net/x/mt-engine/mt-tb.cgi/48


コメントする