Home

flabaka

enableParserを使って、ファイルサイズを抑えてみる


前回のエントリで、以下のようなコードがありました。

Parsers.enableAllBundled();

enableAllBundledを使うことで、各種ファイル形式のパーサーを一度に読み込んで使えちゃうんですが、これだとファイルサイズが肥大化してしまうみたいです。

away3d.loaders.parsers>Parsers.asファイルに、英語のコメントが書かれています。

ざっくり意訳してしまうと、以下のような感じになるかと…

enableAllBundledを使うと、全てのパーサークラスを読み込んでいるので、SWFのファイルサイズが50~100KB増えちゃいます。読み込むファイル形式を制限して、個別にAssetLibrary.enableParser()を使ってあげると、SWFのファイルサイズはいい感じになりますよ

検証してみた

SWFのファイルサイズがどれだけ違うのか、検証してみました。

検証したデータは、先の英語の記事からDL出来るもの(Loader3Dを使って.awdファイルを読み込む)です。FlashDevelopを使って、デバッグとリリースの両方で試してみました。

//Parsers.enableAllBundled();
//enableAllBundledではなく、個別にファイルを読み込む
Loader3D.enableParser(AWDParser);
Loader3D.enableParser(AWD2Parser);
  デバッグ リリース
Parsers.enableAllBundled() 255K 113K
Loader3D.enableParser(AWDParser) 210K 92K
Loader3D.enableParser(AWD2Parser) 204K 90K

サンプルではLoader3Dを使っていたので、それで検証してあります。

AWDParserとAWD2Parserでの違いですが、AWDParserはAWD1ParserとAWD2Parserのラッパークラスなので、その分若干ファイルサイズに違いが出ているっぽいです。

FlashDevelop 4とAway3D 4でStage3Dを試してみる


FlashBuilder4.5とAway3D 4を使ってStage3Dを試す方法が、Developer Connection(US)に掲載されています。

この記事をFlashDevelopで試してみることに…

FlashDevelopのセッティング

FlashDevelop側のセッティングですが、簡単です。

FlashPlayerもインストール

FlashDevelopをインストールする際、FlashPlayerにチェックを入れておくと、FlashPlayerも同時にインストールしてくれます。

デバッグ版のFlashPlayerもインストール

デバッグ版のFlashPlayerも一緒にインストールしてくれるので、後で別途インストールしなくていいので、楽チン!(インストールにかなり時間は掛かりますが…)

あとFlashBuilderだとglobalplayer.swcをダウンロードして…とかしなければいけませんが、FlashDevelopはインストールの際にDevelop側が勝手にやってくれます。

params.wmode = “direct”;もFlashDevelopでは、デフォルトでその設定になっています。

プロジェクトの設定を、FlashPlayer11に

プロジェクト設定から、対象プレイヤーをFlashPlayer11に変更しておきます。

コンパイラオプションの設定

コンパイラオプションの設定を追加しておきます。(-swf-version=13)

Away3D 4をダウンロード

先の記事に書かれているGitHubにあるAway3Dのページから、ソースをダウンロードしてきます。

GitHubからダウンロード

Away3D 4をやってみる

ソースコードなどは先の記事に詳しく書かれているので、ここでは割愛しますが、コード内に以下の記述があります。

Parsers.enableAllBundled();

これを記述することで、away3d>loaders>parsersの中にある以下のクラスが使えるようになります。

  • AC3DParser
  • AWDParser
  • Max3DSParser
  • MD2Parser
  • MD5AnimParser
  • MD5MeshParser
  • OBJParser

これにより、.awd、.3ds、.objファイルなどを扱えるようになります。(TweenerのSpecial Propertyみたいな感じですかね?)

この記述を書かないと、エラーが発生します。

エラーが発生

本当にStage3D?

きちんとStage3Dで動いているのかな? と思いますよね?

日本のDeveloper Connectionに以下の記事が掲載されています。

記事内のイラストを見ると、DisplayObjectが最前面にあって、その後ろ側にStage3Dのレイヤーがあるそうです。

先のAway3Dのコードに、以下の記述を追記してみます。

//初期化あたりに書いておく
_sp = new Sprite();
_sp.graphics.beginFill(0x00FF00);
_sp.graphics.drawRect(0, 0, 800, 600);
_sp.graphics.endFill();
addChild(_sp);
//この後にAway3Dの記述があります

これを実行すると、画面全体が緑一色になります。

最前面のレイヤー(DisplayObject)に緑のBOXが表示されているからですね。

//初期化あたりに書いておく
_sp = new Sprite();
_sp.graphics.beginFill(0x00FF00,0.2);
//以下略

これを実行してみると、DisplayObjectの背後のレイヤーでStage3Dが動いているのが理解出来ます。

Away3DのView3Dクラスの中を見ると分かるのですが、away3d>core>managers>Stage3DManagerやaway3d>core>managers>Stage3DProxyを使うことによって、Away3Dの描画処理をStage3D側で行う設定になっているみたいです。

Away3Dのテンプレートを作ってみた


Away3DLiteには、away3dlite>templatesフォルダの中に、Away3DLiteを始めるのに簡単なテンプレートファイルが幾つか入っています。

これを使うことで、ちょっとAway3DLite試してみるか…といった事が簡単に出来ちゃいます。

でもこのテンプレートファイルは、Away3Dにはないんですよねぇ…

前々から「Away3Dにもテンプレートファイルがあったら、便利だよなぁ」と思っていて、日曜日にFlashup 第12回に参加してきたこともあったので、テンプレートファイルを作ってみました。

作ったと言っても、(Away3DLiteと同じ感じで使えるようにする為)8~9割はAway3DLiteのテンプレートと同じコードなんですけど…

ダウンロード

使い方

BasicTemplate.asというファイルをダウンロードしてきて、同一階層にMainというクラスファイルを作成。

package 
{
	import away3d.primitives.Cube;
	
	/**
	 * @author flabaka
	 */
	
	public class Main extends BasicTemplate 
	{
		
		private var cube:Cube
		
		override protected function onInit():void {
			cube = new Cube();
			scene.addChild(cube)
		}
		
		override protected function onPreRender():void {
			scene.rotationY += 2;
		}
		
	}
	
}

これをコンパイルすると、Cubeがくるくる横に回転します。

ちょっと試したいんだけど、View3DとかScene3DとかCamera3Dとか毎回作るの面倒くさいよね! って人には、ちょっとだけ便利かも…

それは、まぁ、僕なんですけど…

Flash AS3 TUIO Client を使ってみる(1)


先月大阪てら子にお邪魔した際、vispとMIDIキーボードを使って単音を出すことは出来たけど、和音を出すのに苦労している…という話をしたら、「vispよりも、OSC使ったら出来るかも…」とのアドバイスを頂きました。

Flashで使えるOSCライブラリ

Google先生で探してみると、floscが出てきます。

続OOP本にも、floscを使った例が掲載されていますね。

これでやろうかな? とか思ったんですが、探しているとTUIOっていうものもあることが判明。

マルチタッチ用っぽい(?)けど、何だか楽しそうだから試しに使ってみることに…

TUIOのFlash・AS3で使う情報は、以下に掲載されています。

TUIOを使ってみる

まずはビデオの下にある「principal TUIO Flash Resources」のTUIO/FLC gatewayを試してみました。

TUIO/FLC gatewayのリンク先から、udp-flashlc-bridgeをダウンロードしてきます。

Macの場合、ターミナルを立ち上げる→ディレクトリを移動→udp-flashlc-bridgeを実行→testフォルダ内のTuioTest.swfをFlash IDEで開いてあげると、trace文が表示されました。

Windowsでも同じ手順でやってあげればいいだろう…と思ったので、コマンドプロンプトを立ち上げる→ディレクトリを移動→udp-flashlc-bridge-winを実行してみると…

“udp-flashlc-bridge-win”は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません

うむ~どうしたものか? と思っていろいろググってみると、解決策が見つかりました。

Forumnに「Windowsでudp-flashlc-bridge-winを走らせるには、どうしたらいいの?」という質問があって、それに対する回答が、「拡張子を.exeに変更してあげるといいよ!」と書かれていました。

なので、udp-flashlc-bridge-winをudp-flashlc-bridge-win.exeとリネームして、コマンドプロンプトからこのexeファイルを実行してあげれば無事起動しました。

拡張子をexeに変更して、コマンドプロンプトから実行

(Macの時と同様)testフォルダ内のTuioTest.swfをFlash IDEで開くと、connected as: _OscDataStreamとtraceされました。

MIDI機器との連携でもこれが使えるのか分からないけど、メモがてらのエントリ。

FlashDevelop 4.0.0 RC1とFlashPlayer11.0 で遊んでみる


feb19さんのブログに、FlashBuilder4.5とFlashPlayer11を使ったコンテンツ作成方法が掲載されています。

FlashDevelopだと、どうなるの? という方がいらっしゃるかもしれないのでエントリ。

思いっきり便乗です、はい。

ダウンロードしてくる

FlashPlayer11とDebug Player各種をダウンロード&インストールしておきます。

ちなみにですが、FlashDevelopは4.0.0 RC1、FlexSDKは4.5.1での話になります。

FlashDevelopの設定

ツール>環境設定>AS3Context>Installed Flex SDKsに、Flex4.5.1を設定しておきます。

playerglobal.swcの設置ですが、これはFlashDevelopが上手い具合にやってくれるので、そこは飛ばします。

コードを書いてみる

コードもfeb19さんのとこに書いてあるのと同じものでやってみます。

コンパイルターゲットがFlashPlayer10の場合

あれっ、FlashPlayer11をインストールしたのに、cubicCurveToのコードヒントが表示されない…

書き出しのプレーヤーを確認する

そんな場合は、プロジェクトパネル>プロジェクト設定>書き出し>プレーヤーを確認してみましょう。

10.0とかになっていませんか?

ツール>環境設定>AS3Context>Language>Default Flash Versionが10.0に設定されていると、プロジェクト設定のプレーヤーも10.0になっているかと思います。

コンパイルターゲットのバージョンを11に変更

これを11.0に変更します。

再びコードを書いてみると…

FlashPlayerを11に変更

無事、コードヒントが出ました。

コンパイラー設定もしておく

ついでにコンパイラー設定もしておきましょう。

コンパイル設定にSWFのバージョンを設定

プロジェクトパネル>コンパイラー設定>高度な設定>Additional Compiler Optionに、-swf-version=13って書いておきます。

あとはプロジェクトのテスト(F5)を押すだけ。

ね、簡単でしょ?

追記

僕のへなちょこエントリよりも、@nutsuさんの記事の方がより詳しく書かれています。

Home

Search
Feeds
Meta

flashDevelopスポンサー

Return to page top