書き物

技術とか作った物の話とか愚痴文句感想など

Blender で作ったものを Flash で表示する

まだまだ分からないことは多いですが、ひとまず Flash で表示するところまで来たので記録しておきます。 目指す所は、 Blender で 3D のモデリングAway3DFlash 表示です。

対象環境

続きを読む

子から親へ選択的なデータアクセスを行うクラス構成

AS3 でゲームを作る場合に僕が良く使うクラス構成です。 [caption id=“attachment_2481” align=“alignnone” width=“605” caption=“コンテキストを用いたデータのやり取り図”]コンテキストを用いたデータのやり取り図[/caption] 各オブジェクトのメイン処理は各クラスの execute() で行います。 各クラスのデータのみ使用する処理の場合は特に特殊な考えは不要ですが、 例えばキャラクターオブジェクトの攻撃動作で炎オブジェクトを出現させたい場合、 自クラスのみでは解決出来ません。 そういう場合は、ctx によって公開されている親オブジェクトのメソッドに対し、 「炎を作って!」と依頼します。(↓みたいなイメージ) ctx.createFire(x, y); 親オブジェクトは各キャラクターと炎との当たり判定処理を行い、 当たり有りと判定した場合、炎の例えば hit(this) 等呼び出します。 炎クラスの hit() 内では ctx を介して ctx.damageCharacter(10); // キャラクターにダメージを与える ctx.removeFire(this); // 自分自信を消す 等実行します。 まぁつまり、キャラクターと炎のデータやり取りを親に任せることで、 オブジェクト同士のやり取りが自由になるわけです。 親は子のデータやり取りを選択的に開放しているので、 コードが無秩序ということもなく、ある程度ルールに基づいた実装が可能です。 (限度はありますが。)

些細な問題かもしれませんが、上記図の通り、 孫→親のデータアクセスのためには、子に親オブジェクトを持たさなければならなそうで、 これが気持ち悪く思っています。 どうにかならないものですかねぇ。

for each で末尾データの処理をスキップする方法

ちっちゃいネタですが、今まで気づかなかったので。

僕は AS3 で、できることなら for each を使いたがるのですが、この場合インデックスの情報を持っていないので、 「~番目のデータは処理しない」 とかの処理が出来ません。 まあそれは仕方ないのですが、 「末尾のデータは処理しない」 ということは結構簡単に出来ます。

var fooList:Vector. = new Vector.();

// データ登録 //  :

var savedFoo:Foo = fooList.pop();

for each (var foo:Foo in fooList) { // なんか処理 }

fooList.push(savedFoo);

パフォーマンスについては知りません!

Flexで何か作る前に

ちょっと前から、 Air for Android でアプリを作ろうとしているのですが、適当に作り始めてみると案の定苦労しました。 根本的に勉強し直そうと Adobe のサイトを探ってると、以下のページを発見。

1週間でFlexを学ぶ | Adobe Developer Connection

最初は、ビデオとか時間を縛られるし・・・とか思っていましたが、まぁ騙されたと思って。

基本的には MXML での作り方なのですが、 MXML って大分色々楽できるように出来てます。 ということが分かる内容です。 通常の Flex/Air アプリでも Air for Android でも、作る前に見ておいて損はないです。

「個人的に目指せアルバトロスゴルフ」を発表しました

個人的に目指せアルバトロスゴルフ

久々の新作です。 「あほげー」という 24 時間で"あほ"なゲームを作るイベントへの参加作品です。テーマは「アルバトロス」。今回は早めにネタが決まったので、普通に寝ても締切り 3 時間ぐらい前には思ってたものが出来ました。テーマで連想して適当に「ゴルフ」で調べてたら、「サンテレビ|原田伸郎のめざせパーゴルフⅢ」を見つけたので、デザイン的なコンセプトをパクマネさせて頂いた形です。

技術的な部分では以下のとおりつらつら。 あほなこと考える傍ら、以前書いた「Flex SDK で作った外部 swf の中で定義されているクラスを取り出す方法」を試してみました。 やり方としては、使う予定の素材をFlashでガリガリ描画。MovieClip シンボルとしてリンケージに名前を設定。Flash 上では特に何も配置せずにそのままパブリッシュ。ゲームの本開発ではいつも通り FlashDevelop × FlexSDK でやりました。 やってみた感覚としては、「超楽」という感じです。今まで作ってきたやり方の中では一番楽でした。特に素材管理が。最近では Bitmap オンリーでよくゲームを作るのですが、「Bitmap(キリッ」と言っても、Flash でキャラのアニメーションを作って、PNG で書き出しってやってて、ガサッとローディング・・・という感じで実装していましたが、書き出しもローディングもいちいち一手間です。素材の修正をする度に PNG 書き出ししなきゃならなかったし・・・。というか、そもそもそんな作り方はオススメされるものじゃなかったですね・・・。今回のやり方だと、Flash の MovieClip の良いところもまるまる引き継げます(アニメーションは Flash に任せられる等)し、ロードも MovieClip の複製も簡単。当たり判定領域等をアルファ 0 にして Flash で定義するかとかは今後色々考えていきたいと思います。

あほげーは、また 9 月とかに開催されるかも?とのことで、また参加したいです。

FlashDevelop 4.0.0 Beta で MXML を使った Android アプリ開発環境を作る

FlashDevelop 3 では、Air for Android 用テンプレートを自分で取り込む必要がありましたが、FlashDevelop 4.0.0 Beta では標準でテンプレートが用意されていました。アプリのパッケージングやらインストールやらデバッグやらを実行するバッチファイルも整理されていて、結構使いやすくなってます。しかし、このテンプレートって、普通にビルドすると、MXMLでモバイルコンポーネントを使うことが出来ないようです・・・。ということを念頭に置いて、FlashDevelop 4.0.0 Beta で MXML を使った Android アプリ開発環境を作ってみます。 もちろん無料だよ!!!!!!!!!

前書いたやつも整理して書きなおしてみます。

  1. Flex SDK 4.5 インストー 以下サイトから「Adobe Flex SDK」をダウンロード、任意の場所に展開しておきます。 Download Flex 4.5 - Flex SDK - Adobe Open Source
  2. Android SDK インストー 以下サイトから「android-sdk_r11-windows.zip」をダウンロード、任意の場所に展開しておきます。 Android SDK | Android Developers 展開したフォルダ内の「SDK Manager.exe」を実行して、なんかしらアップデートっぽい何かをインストールします。よく分からないので全部インストール。
  3. FlashDevelop 4.0.0 Beta のインストー FlashDevelop 4.0.0 Beta をインストールします。 FlashDevelop 4.0.0 Beta については以下エントリーがとても参考になります。 馬鹿全 - FlashDevelop4.0.0 βテスト インストール後、言語を日本語に、Flex SDK 4.5 のパス登録をしておきます。
  4. Android 端末準備 USB ドライバを入れて Android 端末を開発機と繋ぎます。 機種によっては
    • 一般の USB ドライバ
    • 開発者向けの ADB 用 USB ドライバ
    があるみたいなので注意。 Android SDK のインストールフォルダ内の「tools\ddms.bat」を実行して立ち上がるウインドウに、自端末が表示されれば OK です。
  5. プロジェクトの作成、設定
    1. FlashDevelop にて「AS3 Android App」プロジェクトを作成します。
    2. 「bat/SetupSDK.bat」設定
      対象行設定内容
      3行目 「set FLEX_SDK=」に Flex SDK 4.5 のインストールパスを設定します。 ※FlashDevelop に Flex SDK の登録をしている場合、自動的に設定されてるかも。
      6行目 「set ANDROID_SDK=」に Android SDK のインストールパスを設定します。
    3. 「bat/SetupApplication.bat」設定 必要あらば設定を変更します。変えるとしても「set CERT_PASS=fd」の値を変えるぐらいかと。
    4. MXML のモバイルコンポーネントを使えるようにする 「プロジェクト」パネルから「プロジェクト設定」を開きます。 「コンパイラー設定」パネルの「Advanced | 高度な設定 > Additional Compiler Options」を選択。 右に出てくる「...」ボタンを押下し、出てきたウインドウに「+configname=airmobile」を設定。 この設定によって、コンパイル時に「airmobile-config.xml」が参照されるようになり、MXML のモバイルコンポーネントを利用出来るようになります。
  6. コンパイル 適当にプロジェクト内に mxml ファイルを追加し、ドキュメントクラスとして設定しておきます。 アプリケーションとして記述する mxml タグには ViewNavigatorApplication や TabbedViewNavigatorApplication を使用します。 (くわしくはこちら) 「F8」を押下してコンパイルします。
  7. 証明書作成 「bat/CreateCertificate.bat」を実行します。 「<プロジェクト名>.p12」というファイルが作成されれば成功です。
  8. Android アプリとしてパッケージング、Android 端末で実行 プロジェクトフォルダ直下の「PackageInstallApp.bat」を実行します。 Android 端末にてアプリがプレビューされれば成功です。

これで後はガリガリ作っていくだけです。 FlashDevelop 4.0.0 Beta のテンプレートは、大分色々用意してくれていてとても便利です。さらに「application.xml」の設定も GUI で提供してくれているし、乗り換えるしか無いですね!!!!!!!!!!!!!!!!

分からないこと

  • Flex のモバイルコンポーネントを使えるようになりましたが、コード補完対象にならない。よく分からん!
  • 「DebugDevice.bat」を実行すると、デバッグが出来るような気がするのですが、開発機の IP アドレス云々・・・っていわれてうまくいきません。よく分からん!
  • 開発機から Android 端末上のアプリをアンインストールする方法が分かりません。アプリに設定する ID を指定して「adt uninstall <アプリID>」でアンインストール出来ると思ってたのに・・・。よく分からん!

手探りでAir for Android開発環境を作った

開発環境にお金を掛けたくない人向けに、とりあえずAirアプリをAndroidアプリで書き出し、Androidの端末へインストールする所までメモ。Androidの実機は用意しておいてね!!!!!

FlexSDK、AirSDK、FlashDevelop 以下サイトがステキにまとめてくださっています。 AIR for AndroidのためのFlashDevelop設定

AndroidSDK こちらからAndroidSDKをダウンロードします。 Android SDK | Android Developers 僕はとりあえず「android-sdk_r11-windows.zip」をダウンロード。 解凍したら、「SDK Manager.exe」を実行。いろいろアップデートっぽいものが出てくるので、とりあえず全部インストールしました。 (結構時間かかる)

Android端末の準備 開発機とAndroid端末を繋ぎます。 繋ぐに当たっては、各メーカーのUSBドライバをインストールする必要がある模様。 メーカーによっては、一般のUSBドライバ+開発者向けのADB用USBドライバとかもあるみたい。 (うちのIS03はそうだった。) AndroidSDKのフォルダの「tools\ddms.bat」を実行して立ち上がるウインドウに、自端末が表示されればOKらしいです。

FlashDevelopのプロジェクト設定 FlashDevelopで「AIR AS3 Projecter for Android」プロジェクトを作成する。 「CreateCertificate.bat」編集 9行目の「PATH」にFlexSDKのbinフォルダパスを設定する。 「APK_PackagerApplication.bat」編集 8、10行目の「PATH」にFlexSDKのbinフォルダパス、AndroidSDKのplatform-toolsフォルダパスを設定。 12行目の「AIR_INSTALLER」に「FlexSDK配下runtimes\air\android\emulator\Runtime.apk」のパスを設定。 「adb -e install -r %AIR_INSTALLER%」とか「adb -e install -r %APK_FILE%」とかコマンドがありますが、これで実行すると「デバイスが見つからない」みたいなエラーが出てアプリのAndroid端末へのイン ストールがうまくいきませんでした。よく分からん。 とりあえず「adb install %AIR_INSTALLER%」、「adb install %APK_FILE%」に変更。

コンパイル、アプリのAndroid端末インストー コンパイル F8を押してコンパイル

CreateCertificate.bat実行 うまくいけば「SelfSigned.p12」ってのが出来ます。

APK_PackagerApplication.bat実行 パスワードは変更してなければ「fd」。 都度キーを押して進めていく。 Airランタイムのインストールは、Android端末にAirがインストールされてたら、「既にインストール済み」となる。 次にプロジェクトで作ったパッケージが端末にインストールされる。 うまくいったら、端末にプロジェクト名のアプリがインストールされてるはず。

自作アプリアンインストール用に「adb uninstall %APK_FILE%」というコマンドを用意しておくのもヨサゲ。

あとは好きに作っていくだけ!!!!!!!

手探りすぎて、よく吟味しないで作業しました。ここを起点に色々ためしてみようと思います。