Results tagged “AS3”

Apr 062008

外部swfの削除はLoader.unloadは使わない方が良いんじゃないかという件に誤りがあった件

ここ数日色々やってきましたが、
apeirophobia: Loader.removeChildapeirophobia: 外部swfの削除はLoader.unloadは使わない方が良いんじゃないかという件


Loader.unloadの処理にミスがありました・・・。(恥ずかしい・・・)


apeirophobia: Loader.removeChildの方でテストしていたスクリプトで

	_loader.unload();
	_loader= null;
となっている部分。これunloadでlodar.contentsが非表示になるのでうっかりしていたのですが、loader自体がremoveChildされていませんでした・・・orz。 ということで
	_world.unload();
	removeChild(_world);
	_world = null;
としてもう一度検証してみました。 以下その結果。
Continue reading 外部swfの削除はLoader.unloadは使わない方が良いんじゃないかという件に誤りがあった件.

Apr 062008

外部swfの削除はLoader.unloadは使わない方が良いんじゃないかという件

延々と検証をしてきましたが、なんかLoader.unloadは使わない方が良いのではないか?という結論に至りました。既出だったらスンマセヌ。

追記:06-Apr-2008 20:55:08
以下の検証には誤りがありました。
正確な検証結果はapeirophobia: 外部swfの削除はLoader.unloadは使わない方が良いんじゃないかという件に誤りがあった件を参照してください。スイマセン。

やり方としてはunloadを使う代わりに、removeChildを用いる。
で、子供の方でEvent.REMOVED_FROM_STAGEをlisten。
これをキーにしておけばネストしている子供に対しても一気にremove処理が適応できる。
で、それぞれの子供の中でTwennerやらEventListenerを掃除するprivateメソッド組んでおく。
(当然removeのメソッドの中ではEvent.REMOVED_FROM_STAGEもremoveする)

これで前にやったapeirophobia: Loader.removeChildと同じ検証をしてみた。
結果は以下のとおり。

Continue reading 外部swfの削除はLoader.unloadは使わない方が良いんじゃないかという件.

Apr 042008

img8.debug.Debugger

先日エントリーしたDebuggerをちょっと変えました。
基本FPS計測はOFF。でFPS表示の前のボタンをクリックして計測開始、再度クリックで計測中断。ただこれによって一度増えたメモリ消費が下がるのか?はまだ完全に検証できていません・・。(もともとがあまりに微小な値なのでかなり長時間回して検証しないと良く分からん)あとはグラフの幅だとか、レコードする個数とかプロパティを設定できるように。(普通はさわらないだろうけど)

Continue reading img8.debug.Debugger.

Mar 262008

img8.Document

昨日から諸々うにゃうにゃやっていたものを晒してみます。
突っ込みどころ満載だと思いますが・・・汗


目的は
・stand aloneモードなのかcomplex mode?なのかで動作を切り分けたい(開発過程において)
・as2で言うところの_rootを取得したい。
・実行環境がサーバ(http or https)かローカルなのかを取得したい。
・DisplayObject以外でもstageを参照したい。
と言うところ。


使い方はDisplayObjectで、

import img8.Document;
Document.isRoot(this);
といった感じで実行すると、そのDisplayObjectの含まれるswfが最上位である場合rootとstageが格納。それ以降読み込まれた外部swfでisRootがcallされてもreject(多分)。


ただし一番親のswfでisRootが実行されていないと、errorをthrowします。
なので、とりあえず一番親になるswfでは実行必須になってしまっています。
(ここを子供からでも解決できるように悪戦苦闘していました)


用意されているmethod,propertyは以下のとおり。

isRoot(displayInstance:DisplayObject):Boolean
displayInstanceがrootに相当するか否か?相当する場合Documentクラス内にrootとstageが定義されます。親であった場合true。

root:DisplayObject [read-only]
最上位のdisplayObjectを戻す。

stage:Stage [read-only]
ステージクラスを戻します。一応これ経由でlistener登録、削除できますので、DisplayObject以外でonResizeを取得することも可能なはず。

url:String [read-only]
最上位のswfのURLを戻します。まぁ特に使うことはないかと。

isLocal:Boolean [read-only]
動作環境がローカルかサーバ上(http or https)で動作しているか?これでローカル開発モード、サーバモードの切り替えなどを行えるかと・・。

っつーようなかんじです。理想は親swfでisRootしないで、子swfから実行してもroot,stage,urlなどが取得できるのが理想なんですが、うまくいかない・・・。出来そうな気だけしているのですが、実力が追いついていません・・。

Continue reading img8.Document.

Feb 212008

ストリングからクラスのインスタンスを作る

以前にBeInteractive!さんが書いていたAS2のストリングからクラスのインスタンスを作るはAS3ではどーなったのか?
ということで、書いておく。

これは前のエントリー。loadBitmapの延長線上にあります。
つまりライブラリにある画像をクラスに割り当て、BitmapDataとして取得する際に、画像のクラス名を変数として処理しないと正直使えないぜ!ということです。

わかりやすく言うと、ライブラリの中に"photo1","photo2","photo3"...と画像が存在して、それぞれにクラスが割り当てられていたとして、インスタンス初期化の際にすべてクラス名を定数で書いていたらif分の嵐。10個ぐらいなら耐えれるけど、100個とかあったり、可変したりしたらどーすんだ?と・・。
(まぁでも総数はどっちにしてもスクリプトに記述する必要はあるのだけど)

ということで調べてみました。
AS2のときはものすごい技が必要でしたが、AS3はその辺ツールが用意されていました。
getDefinitionByName ()

使い方は簡単。

import flash.utils.getDefinitionByName;
private function getImage(_id) {
var _className:Class = getDefinitionByName("photo"+_id) as Class;
var bmp:BitmapData = new _className(0, 0);
var _bm:Bitmap = new Bitmap(bmp);
this.addChild(_bm)
}
こんな感じ。 一応"getDefinitionByName"で戻ってくるのは"パラメータで指定したクラスのクラスオブジェクトへの参照"なので、"as Class"でクラスに定義してあげます。(多分これをやらないと、型指定無しで使えないと思う)

最初

var _className:Class = "photo"+id as Class;
とかやったんだけど、激しい勢いで怒られた。 asはそんなに万能ではないようです・・・。 うっとおしい。

PS
あ、コードはimport全部してないからbitmapとかは自分でimportしてください。

Feb 212008

loadBitmap

もういまさらAS3の初期の話なんて恥ずかしくて書くのもあれなのだけど、一応自分のために書いておく。

AS2ではリンケージを設定したライブラリ内のビットマップをloadBitmapでビットマップデータに割り当てることが出来た。ただAS3からloadBitmapは消滅している。(そもそもリンケージと言う概念が無い)

ではどーするのか?
簡単なのはMovieClip(sprite)を作って、その中に画像をおくのが簡単。
しかしまぁ画像分MovieClip作るのかよ?って話は面倒なので、ビットマップを直接参照するようにしてみる。

080221a.jpg
まずライブラリに入っている画像ファイルをリンケージさせる。
リンケージプロパティダイアログで「識別子」はdeadしている。
クラス名の部分にはそのままだと画像のファイル名が入る。(aaa.jpgとか)
で、基本クラスは"flash.display.BitmapData"。

一応aaa.jpgとかでも参照できるのだけど、他のクラスとバッティングする可能性もあるからなんか画像用のクラスを割り当てる名称に統一しておいた方がトラブルは無いかも。(注釈のHTMLタグってなんだ?)

ということで一応"photo1"というクラス名にしておくことにする。

で、このクラスファイルは特に明示的に生成する必要は無いので、そのままにしておく。
で、これをBitmapDataとして取得するには。

var bmp:BitmapData = new photo1(0, 0);

ってな感じ。
ここでBitmapDataのコンストラクタの引数width,heightは形式上0,0を指定。ここにはまった・・・。

わざわざリンケージした画像のサイズを書かないといけないのかと思って、そんなあほな話があるかぃ!と・・・。ただ指定しないと怒られるし・・・。ということで悪戦苦闘してしまった・・・。
0,0指定必須じゃなくてNullを許容しておいてくれ・・・・orz。

一応0,0を指定したとしても内部的に割り当てられた画像のサイズに追従してサイズが定義される。
あとはステージに表示させる際にはBitmapを定義してaddChild。

var _bm:Bitmap = new Bitmap(bmp);
this.addChild(_bm);

こんな感じかな?

本当はこれは検証のために外部読み込みの画像を内部において簡単にテストしようとおもってはじめたことなのだけど、なんか非常に面倒だった・・・。時間もったいない。

Feb 152008

AVM2のガベージコレクタ諸々

ActionScript最適化 多分その1 ガベージコレクタを攻略する My life as an APE

メモメモ。
おそらくゲームプログラマの方ではないかと思うのですが、ここまで詳しく調査している資料は見たことが無い。すごいです。

奇しくも同じサイト名だが、レベルには雲の上と石の下ぐらいの差がある。

Jan 252008

WOW-Engine

[shirotokoro » AS3 3D Physics Engine : WOW-Engine]
(http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/)

Sandyベース。Collisions と physical reactionsはAPE。
強烈。しかし少し重たい。当然と言えば当然だけど・・。
すごいな段々3Dソフトの域に達してきたぞ・・。

問題はこれで人間が上手に操作できるものを作れるか・・・汗

via:fladdict@Twitter

Jan 072008

誤差

PC上での計算は乗算の方が除算よりも効率的だというのは、なんとなく知っていて、
200/100
より
200*0.01
の方が良かろうと思っていたのですが、
ちとAS3で色々試していると(Loading系)

var _rate:Number = 100*dr.loaderInfo.bytesLoaded / dr.loaderInfo.bytesTotal;
_rate = Math.round(100 * _rate)*0.01;
みたいな事をやっていたのですけど、これでやってると
1.8
1.83
1.86
1.86
1.8900000000000001
1.9100000000000001
ってなかんじで誤差が出てしまう。
Continue reading 誤差.

Jan 072008

packageの外に定義した関数やらクラスやら

AS3ではpackageの外でも変数やら関数やらクラスやら定義できるのだけど、package内部と外部ではそれぞれimportを行わなくっちゃいけない。これって同じクラスファイルの中で2回importしている訳なのだけど、なんか問題とかあったりするのだろうか?

いや、別にpackage内部の関数にしてもいいんだけど、staticなconstractor(表現は微妙です、つまり1度しか発動させたくない関数があるとかそゆこと)な感じで処理をしたいときにpackage外に書くと楽チンなのかな・・・って。

package内部に記述した場合は何かしらフラグを立ててそれをif判定して切り分けっつー感じになるんだとおもうんだけどね。効率(ほぼ無意味ではあるが)を考えたらpackage外部かしらと・・・。

Continue reading packageの外に定義した関数やらクラスやら.

Jan 062008

flashVarsのJSON化

AS3でFlashVarsをJSONに変換して処理しようと思っていたのだけど、なんか上手くいかない。
JavaScriptの関数まで引数として引き渡されてしまう・・・。なんでだろー。なんでだろー。

こんな感じ。

{params}	{"a":100}
{toJSONString}	function (w) {
    var a = [], k, i, v;
    if (w) {
        for (i = 0; i < w.length; i  = 1) {
            k = w[i];
            if (typeof k === 
{config}	../xml/local.xml
Continue reading flashVarsのJSON化.

Jan 062008

com.karatesystem.Root

AS3でrootの参照が面倒なので一つクラスを作ってみた。
ついでにStageもSprite無しで参照できるように・・・・。

用途としては複数のSWFで構成されるプロジェクトで各子供のSWFでも単独動作させつつ開発を行いたい場合に使用。なんつーかネーミングがイマイチ。
(どっかのフレームワークに標準的に実装されていそうな気もするけど・・・)

Continue reading com.karatesystem.Root.
  1 2 3 4

Search and Archives

Tags