初級
Adobe AIR for Androidを使えば、Flash Professional CS5やFlash Builderで作成したファイルから、Androidで実行可能な.apkファイルを作成することができます。ActionScript 3.0のソースをほぼそのまま使えるため、過去に制作したコンテンツのを容易に移植することができます。本記事では、筆者が実際にFlash Professional CS5とAdobe AIR for Androidを使って「Android版モアイまわし」を制作した際のコツを紹介します。
なお、Adobe AIR for Androidのインストールやセットアップ方法については、下記の記事を参考にしてください。
「モアイまわし」とは、筆者が2004年に制作し、Webで公開したFlashゲームです。「画面上のいろいろな方向を向いたモアイを全て正面に向ける」というルールで、操作はマウスカーソルを動かすだけのシンプルなゲームです。
http://www.skt-products.com/contents/moaimawashi.html
そして、こちらが実際にWeb版のモアイまわしをAndroidアプリへ移植したものです。
http://www.youtube.com/watch?v=IP_swOC7hL0&feature=player_embedde
Adobe AIR for Androidの拡張機能をインストールしたFlash Professional CS5があれば、手持ちの.flaファイルを開き、パブリッシュ設定を「AIR Android」に変更するだけで、Androidで動作する.apkファイルを作成することができます。
ですが、実際はAndroid搭載のデバイス(スマートフォンやタブレットPCなど)の環境に合わせて次のようなチューニングすることになります。
それぞれ説明していきましょう。
現状スマートフォン向けAdobe AIRで対応しているのはActionScript 3.0です。Web版の「モアイまわし」はActionScript 2.0で作成していたので、ソースファイルをActionScript 3.0に書き直しました。
移植する実機に合わせて画面サイズを調整します。今回の移植では、Googleの「NexusOne」に合わせて縦800×横480ピクセルにしました。ちなみに、Adobe AIR for AndroidもFlash Playerと同様にディスプレイのサイズに合わせて、アプリの表示スケールが自動的に変化します。そのため、必ずしも正確なサイズに合わせる必要はありませんが、異なるサイズの場合はステージの外にあるものまで見えてしまうので注意が必要です。
スマートフォンは、携帯電話に比べるとCPUなどのスペックが高くAdobe AIR for Androidアプリもかなり快適に動作しますが、マルチタスクなのでなるべく負荷がかからないように移植しました。特に画面の解像度が高いため、全体的にビットマップ化するなど、描画部分をメインに軽量化しました。
Adobe AIR for Androidには、タッチパネル操作時のイベントとして「TouchEvent」や「TransformGestureEvent」が用意されており、マルチタッチなどの多彩な操作を活用することができますが、今までの「MouseEvent」にも対応しています。例えば、「画面をタッチする」という動作は「MouseEvent.MOUSE_DOWN」で取得できるので、Webのものと同じ感覚で扱うことができます。そのおかげで、今回の移植ではTouchEventを使わず、MouseEventのみで作りました。
また、Web版のモアイまわしはマウスカーソルを動かすだけで遊べるのに対し、Android版はディスプレイをタッチしたままスライドして遊ぶというものにルールが変わっていますが、「ディスプレイをタッチしたままスライド」という動作中はMouseEvent.MOUSE_MOVEイベントが発生するので、これも特に意識せずに移植することができました。ただし、ディスプレイから指を離した時にマウス座標がおかしな値になるので、MouseEvent.MOUSE_MOVEを使う場合は、buttonDownプロパティでドラッグしている状態かどうかを常に判定しています。
PCの場合、ブラウザを閉じればそのブラウザ内のFlash Playerも終了しますが、Android端末の場合、一度起動したアプリケーションは「アプリケーションの終了」処理をしないかぎり、画面を閉じても処理を実行し続けます。その間も電池やメモリを消費するので、バックグラウンドで実行する必要がないのであればアプリケーションを終了する処理を記述する必要があります。
次のソースは、画面を閉じてアプリケーションがバックグラウンドになった時に送信されるEvent.DEACTIVITEイベントを受け取り、アプリケーションを終了させるサンプルです。
import flash.desktop.NativeApplication;
import flash.events.Event;
stage.addEventListener( Event.DEACTIVATE , _onDeactivateHandler );
/**
* バックキーを押すなどしてアプリケーションがアクティビティではなくなった時に実行
**/
function _onDeactivateHandler( e:Event ):void{
NativeApplication.nativeApplication.exit(); //アプリの終了
}
「Android版モアイまわし」はWeb版には無いオリジナル要素として、カメラで撮影した顔をモアイに貼り付けて遊ぶことができます。
モアイに画像を貼り付ける仕組みは3Dのテクスチャ技術を応用しており少し複雑な処理ですが、カメラを扱うこと自体は非常に簡単で、カメラを使うためのCameraクラスとカメラの映像を表示するVideoクラスの2つを用意するだけです。具体的には下記のようになります。
import flash.media.Camera;
import flash.media.Video;
import flash.events.ActivityEvent;
var camera:Camera = Camera.getCamera();
camera.addEventListener( ActivityEvent.ACTIVITY , _onActivityCameraHandler );
camera.setMode( 640 , 480 , 24 ); //カメラの画像サイズとフレームレート
var video:Video = new Video( camera.width , camera.height );
video.attachCamera( camera );
addChild( video );
function _onActivityCameraHandler( e: ActivityEvent ):void{
//カメラが有効になった際の処理
}
Cameraを定義してから実際に使えるようになるまで少し待ち時間がありますが、実際に使えるようになるとActivityEvent.ACTIVITYイベントが送信されるので、イベントリスナーで利用することができます。
カメラから取り込んだ映像を画像として扱うのも非常に簡単です。カメラからの映像はリアルタイムにVideoクラスに表示されます。VideoクラスはDisplayObjectのサブクラスなので、ここに表示された画像はBitmapDataにdrawすればそのままビットマップデータとして扱うことができます。
var photoBmd:BitmapData = new BitmapData( camera.width , camera.height );
photoBmd.draw( video );
Androidアプリでカメラやネットへ接続する場合、パーミッションという設定が必要になります。ネイティブなAndroidアプリケーションの場合、プロジェクト内に「マニュフェストファイル」というものがあり、その中で「カメラを使います」という宣言を記述するのですが、Adobe AIR for Androidの場合は、パブリッシュをすると同フォルダ内に自動的に作成される「(ファイル名)-app.xml」という設定ファイル内にパーミッションを手動で記述します。
<android>
<manifestAdditions>
<manifest>
<data>
<![CDATA[<uses-permission android:name="android.permission.CAMERA" />]]>
</data>
</manifest>
</manifestAdditions>
</android>
移植自体はとても簡単にできます。ただし、チューニングはするべきでしょう。現状スマートフォンは基本縦画面ですが、タブレットPCなどは横画面が多いと思われます。ネイティブなAndroidアプリでは画面の向きごとに別のレイアウトを定義できるよう設計されています。Adobe AIR for Androidアプリでも、その辺の意識が必要になると思います。
カメラ機能は、PCと異なり、ほとんどのスマートフォンにカメラが付いているので、ユーザーにとってWebよりもかなり敷居が低くなった印象を持ちました。
Flashコンテンツを作るのはそれなりに時間がかかります。Adobe AIR for Androidで簡単にAndroidアプリとして復活できるのに、Webだけで終わらせてしまうのはもったいないです。今Android市場は勢いがあるのでなおさらです。とりあえず動かすだけならすぐにできます。予想以上に感動しますので、ぜひ一度お試しください。