Results tagged “Flash”

Oct 242009

32 ビットを超えたときのuintの挙動

32bitを超えた値だと、超過部分が-1に変化してしまう。
つまりこんな挙動になる。

var a:Array =[];
a.push(4294967295);
a.push(100);
a.push(4294967295);
a.push(100);
a.push(4294967295);
var total:uint = 0;
for (var i in a)
{
	total += a[i];
	trace(i,"@",total);
}
trace("finish",total);

実行結果

0 @ 4294967295
1 @ 99
2 @ 98
3 @ 198
4 @ 197
finish 197

ややこしいね。

例えば

var a:Array =[];
a.push(4294967295-90);
a.push(100);
a.push(4294967295);
a.push(100);
a.push(4294967295);
var total:uint = 0;
for (var i in a)
{
	total += a[i];
	trace(i,"@",total);
}
trace("finish",total);

とすると

0 @ 4294967205
1 @ 9
2 @ 8
3 @ 108
4 @ 107
finish 107

こーなる。
ああ面倒くさい。

ちなみにNumberは53 ビットまで使用可能なので、Numberで計算するとこんな感じになる。

var a:Array =[];
a.push(4294967295-90);
a.push(100);
a.push(4294967295);
a.push(100);
a.push(4294967295);
var total:Number = 0;
for (var i in a)
{
	total += a[i];
	trace(i,"@",total);
}
trace("finish",total);
trace("to uint = ",uint(total));

最後にuintに変換した部分は、また超過部分が-1で演算されるので答えは同じになってしまうけど・・。

0 @ 4294967205
1 @ 4294967305
2 @ 8589934600
3 @ 8589934700
4 @ 12884901995
finish 12884901995
to uint = 107

Oct 192009

Query周りとか

日曜はワイフとマイソンが遊びに出かけたので、これまでの処理を再度見直してみる。
これまでウニャウニャにしてた部分は
SceneEvent.SCENE_QUERY
のイベントに絡んだコマンド処理の部分。

Query変化時のProgressionのステータスとしては
1)progression.running==true
2)progression.running==false (既にそのシーンにいる)
の2パターンが存在

1)の場合はloadイベント後にSceneEvent.SCENE_QUERYが発動するのでSceneObjectにaddCommandしてやれば特に気にすることは無い。
問題は2)の場合、SceneObjectのコマンドで制御できないので、独自にSerialListで管理するわけになるのだけど、その際の_onGoto時との連動部分。

簡単に言うと、常にコマンドは別で用意したSerialListで管理して、それをProgressionの状態によって、SceneObjectに追加するか、executeさせるかを切り分け。_onGoto時には、そのSerialListをinterruptしてリセットという処理をSceneObjectのコマンドに追加。

ってな感じでシンプルに制御できた。

これまでSceneObjectのコマンドと、SceneEventに絡まないCommandを別管理してややこしいことになっていたのだけど、この辺がかなりスリムになってスクリプト的に見通しもよくなったし、動作も軽快になった。

やっぱ日々の業務に追われない時間の中での作業時間って必要だ。

#Progression4でその辺どうなってるのか、知らないけど・・・(ゴメンナサイ

Jul 282009

Flash希望機能

再コンパイル無しでのプレビュー機能。
すげーほしい。
ほしくね?
オラめっさ欲しいわ

Jul 252009

なんちゅうか

一番作業時間を喰うのは、Flashのコンパイル待ち時間なんじゃないだろうか?
ちょっとソースを直して、コンパイルして20秒待機とか、時間がもったいなさ過ぎる。
といって、ソースをかなり直してからコンパイルしたら、えらいエラーがでて、どこからやり直せばええねん?!見たいなことになるし。

なんにしてもコンパイルの時間の短縮を!
わーわー!!

Jul 212009

はうあー

最近Flashのオーサリング環境では問題なく動いているのに、HTMLに組み込んだらエラーになるケースが多い。HTMLと連動していたりするからだろうけど、まぁなんにしてもHTMLに組み込んでからのエラーは拾いにくくてめんどくさい。

そんなこんなでこの3連休フガフガしてんねん。

Jul 042009

メモ

Jul 022009

Fiddler2のJson Inspectorを追加してエラー

Fiddler Web Debugger - A free web debugging tool
横取り丸+InetSpyからFiddlerに乗り換えてかなり経ちますが、先日やっとこJSON Viewer - HomeのJson Inspectorを入れてみた。

指定の通りdllを配置して、configファイルも修正したのだが、起動するとこんなエラーが出る。
090702.png

一応動作しているから大丈夫なのだと思うのだけど、なんか気持ち悪い。


一応ソフトを軽く紹介しておくと、

Fiddler
FiddlerはMSのプログラマの方が作られたとかいう話ですが、通信を拾うProxyサーバになります。(横取り丸+InetSpyを合体させたようなもの)
InspectorをWebFormsで見れる、returnのJSONをパースしてくれる(これはJSON Viewerのadd onを入れる必要あり)、Encorder機能、gzip encord、requestのBuild等、サーバとの連携関係の開発に際して必要なものがほぼ実装されているんじゃないかと思います。手放せない感じです。


JSON Viewer
Json Editorです。これは単体で動作させてもすばらしい。これまでJson Editorって使い勝手の良いものがなくて(大体重たくて使い物にならない)、自分でAIRで作るしかないのか?とモンモンとしていましたが、これに出会ったおかげでそんな思いも大体消し飛びました。(といってもfile openやらD&Dが実装されてなくて、基本Clipboard経由でのやり取りっつーところが腑に落ちないのですが・・・)しばらくこれで耐え忍びたいと思います。これでも我慢できなくなったら自分で作ろうと思います。

これに
帯域管理NEGiES、携帯シミュレータFireMobileSimulator.orgを組み合わせれば、ほぼ一通りの環境と動作確認が可能なんじゃないかと思います。

なんか他に良いソフトがあったら教えてください。
本当はJson Inspectorを追加して発生するエラーの回避方法が知りたい訳ですが・・・。


ということで作者のみなさんに感謝!

Jun 212009

VerifyError: Error #1021

昨日からこのエラーではまっている。

VerifyError: Error #1021: 最低 1 つのブランチターゲットがメソッドの有効な命令を反映していません。 * メモ : このエラーは、SWF 内の ActionScript が無効であることを示します。 該当ファイルが壊れていない場合は、問題をアドビ システムズ社までご報告ください。

なのだそうだ・・・。
どうもswitch文あたりが影響を与えているっぽいが、なんか良く分からないな・・・。

Apr 132009

Supported Character Sets

よく忘れるのでメモ
Supported Character Sets - ActionScript 3.0 Language and Components Reference

日本語だけでも聞いたこと無いやつあるけれど・・・。
これとか昔のMACのキャラクターセット?
Japanese (Mac) x-mac-japanese

Apr 132009

URLStreamでFLVを再生する

イメージやらswfは特に問題ないが、flvってどうやるんだろう?
attachStreamにURLStreamを割り当てるわけでもないだろうし・・・。

誰かやっている人とかいるのかしら??
(まぁそんな需要もないかもしれんのだけど)

Continue reading URLStreamでFLVを再生する.

Apr 132009

SecurityDomain周り

SecurityDomainで諸々メモ。(まだ間違っている部分があるかもしれない)

条件
・セキュリティポリシーファイルを読込先サーバに配置できない
として、どーやってそのサーバに配置されているソースを読み込むか?ということでProxyのような働きをするswfを用意し、それを介して読込先サーバのリソースにアクセスしてみるようなかんじ。


・Security.allowDoaminの設定。
Security.allowDoamin("*")でも良いが、危険なので

親:Security.allowDomain(loader.contentLoaderInfo.url);
子:Security.allowDomain(this.root.loaderInfo.loaderURL);
な感じで動的に設定した方がよさげ。


・LoaderContextの設定
checkPolicyFile = false;
securityDomain =null;
これらを設定するとcrossdomain.xmlを参照し、その時点で停止。
ApplicationDoaminの設定は問題ないが、Security.allowDoamin前に確認されるからか、適応されないっぽい。まぁLoaderContext無しで動くようにする必要がある。


・子swf内クラスのイベント
取得するにはdispatchを受け付けるように、親にもSecurity.allowDoaminが必要(当たり前ですが)


・子swfでのクラス定義のタイミング
ポリシーファイルが定義されている場合は、子swfの変数として
var a:hoge = new Hoge()
見たいにして定着させるが、Security.allowDoaminで開放する場合には、解放後定義しないと参照できない。つまりコンストラクタで

Security.allowDomain(this.root.loaderInfo.loaderURL);
とした後に new Hoge(); 等と空打ちして焼き付ける。


・子swfのクラスの取得
SecurityDomainが同じ場合は、ApplicationDoamin.currentDoamin.getDefinitionでクラスを取得できるが、前述の通りSecurityDomainが異なるためApplicationDoamin.currentDoaminに子swfが含まれていない。このため

loader.contentLoaderInfo.applicationDomain.getDefinition("Hoge") as Class;
みたいに取得する。ただし、これを親クラス側で変数に代入して流用は可能。
var hogeClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("Hoge") as Class;
var hoge = new hogeClass();
ただし型指定をするとエラーになる。 簡単なのは子クラスを格納するクラスを作って、その中にStaticで格納するのが楽。


・Loader系
子swfで定義されたLoader拡張クラスを、親swfでgetDefinitionして取得した後は、親でインスタンス化しても使用可能。ただしcontnt等セキュリティエラーに抵当するプロパティもある。例えばBitmapDataを取得したい場合は、子swfに含まれるLoader拡張クラスの中で、BitmapData化して引き渡すなどの処理が必要。

public function get bmd():BitmapData 
{
	var bmd:BitmapData = new BitmapData(content.width, content.height);
	bmd.draw(content);
	return bmd;
}
こんなかんじ?このBtimapは親で自由に使える。Sprite系なども基本newしてしまえば自由に使えるが、SecurityDomainを超えた要素はやはりセキュリティエラーになるので注意。(この辺ローカルでは確認できないので、サーバ上で確認するしかないのだけど・・、そこが非常に面倒)


ただリダイレクト系の分散負荷のシステムだと、結局このproxySWFとそこから呼ばれるソースのIPがまた変わってしまうという延々とループな感じの挙動にってしまう。イメージやらswfやらが対象であればバイナリ化してLoadしたほうが圧倒的に楽。ただFLVの場合が・・・・汗

ということでとりあえずメモ。

Apr 112009

はて・・・

ScruityDomainを超えるとApplicationDomainを統一しても、子SWFのドキュメントクラスはgetDefinitionできなかったっけ??

なんか頭こんがらがってきた。

Mar 072009

Flash今昔

結局最終的には、行ごとにTraceを書いて、どこでバグが起きているのか?を書き出している。
Progressionなら、name指定すれば良いのは分かっているが、全部のコマンドにnameを指定するのは正直しんどい。なんか勝手にそのASの何行目のコマンドだよ!とか取得して埋め込めないものだろうか?とか書いてみる。
ゴメンナサイ、ゴメンナサイ。

地道にがんばります。

Feb 162009

TextFieldAutoSize.RIGHTの憂鬱

もうこれ前々から良く分からないんだけど、改めて今日再チャレンジしたけどやっぱり分からない。
何がやりたいかっていうと
・右揃え(基点、行送り共に)
・改行アリ
・幅固定
をやりたいってこと。
幅固定をなしにして普通にやるとこんな感じ。

import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;

var txf:TextFormat = new TextFormat();
txf.align=flash.text.TextFormatAlign.RIGHT;

var tx:TextField = new TextField();
tx.defaultTextFormat = txf;
tx.border=true;
tx.autoSize =TextFieldAutoSize.RIGHT;
tx.x=200;
tx.text="これは どうしてああああああ \nこうなるの?";
addChild(tx);

mmts_mobile004.gif
この場合はtextFieldの端ではなく、内部のテキストの右端がx=200にフィットする。
TextField自体の右端にあわせる場合は一度defaultのwidth=100をリセットしてwidth=0とすれば可能。またautosize設定の前にx座標を指定する場合には、これも同じく一度width=0にしてやればよい。
こんな感じ

var tx:TextField = new TextField();
tx.defaultTextFormat = txf;
tx.border=true;
tx.x=200;
tx.width=0;
tx.autoSize =TextFieldAutoSize.RIGHT;
tx.text="これは どうしてああああああ \nこうなるの?";
mmts_mobile001.gif

で、wordWrapを入れた場合いきなりこんなことになる。

var tx:TextField = new TextField();
tx.defaultTextFormat = txf;
tx.border=true;
tx.wordWrap=true;
tx.autoSize =TextFieldAutoSize.RIGHT;
tx.x=200;
tx.text="これは どうしてああああああ \nこうなるの?";
mmts_mobile002.gif いきなり左基点である。(この場合のTextFieldの幅はdefaultの100)
Continue reading TextFieldAutoSize.RIGHTの憂鬱.

Feb 152009

メモ

public var aaa:Sprite = new Sprite();
とかして、何も内部に入れないままで、height、widthを設定すると、height=0,width=0とかになるんだけど、その後graphicとかで内部に何か配置しても表示されなかったりする。
なんかイマイチ仕様が良くわかってないけど、変数定義で初期化している場合にはこれ気をつけよう。

3時間も無駄にしてしまった・・・。

Feb 132009

カナシス

なんかsatatic constが継承されなくって、どーしてだろう?とか
昨日から悩んでいたのだけど、何のことはないPreloaderでもそのクラスを参照していて、変更が反映されていなかっただけだった・・・・むなしい・・・むなしすぎるぜ
コン畜生

Feb 092009

ProgressionでRSLを配置するとCastDocumentの"_onInit"がロストしてしまう件

先日のエントリー(AS3での埋め込みフォントの共有について:其の伍[RSLの先読み対応 with Progression](多分解決))の中で書いた、「2)ProgressionでRSLを配置するとCastDocumentの"_onInit"がロストしてしまう。」の件について少し調べてみました。前回のエントリーでは

loaderInfoの"Event.COMPLETE"がRSLが存在すると発動しないというのが起因しているかと思います。
ってさらっと書きましたが、一応順を追って書いておきます。

"CastDocument._onIinit"は"ExDocument._initialize"内でdispachされて発動されます。"ExDocument._initialize"の発動は、"ExDocument"内の4つのフラグ"_initialized","_loaderInited","_loaderCompleted","_addedToStaged"が

if ( _initialized ) { return; }
if ( !_loaderInited ) { return; }
if ( !_loaderCompleted ) { return; }
if ( !_addedToStaged ) { return; }
を満たした場合に実行されます。 で、RSLを配置しない場合は
trace("ExDocument._initialize",_initialized,_loaderInited,_loaderCompleted,_addedToStaged);
//ExDocument._initialize false false false true
//ExDocument._initialize false true false true
//ExDocument._initialize false true true true
//発動
な感じで"_onInit"がcallされます。

一方RSLを配置した場合は

trace("ExDocument._initialize",_initialized,_loaderInited,_loaderCompleted,_addedToStaged);
//ExDocument._initialize false false false true
//ExDocument._initialize false true false true
//停止

のなります。問題になっているのは3番目の変数"loaderCompleted"であって、これは"ExDocument.loaderInfo"の"Event.COMPLETE"によって切り替わるフラグになります。

loaderInfo.addEventListener( Event.COMPLETE, _complete, false, int.MAX_VALUE, true );

つまり"CastDocument.loaderInfo"の"Event.COMPLETE"が発動しない。というのが先の

loaderInfoの"Event.COMPLETE"がRSLが存在すると発動しないというのが起因しているかと思います。
この一文の意味するところです。

RSLを配置していると何故に"CastDocument.loaderInfo"の"Event.COMPLETE"が発動しないのか?そこさえクリアすれば動作するのですが、RSLの情報にどーやってアクセスすんだ?ってことろが未だ分からず途方に暮れております。

Continue reading ProgressionでRSLを配置するとCastDocumentの"_onInit"がロストしてしまう件.

Feb 082009

翻訳

前々から思っていたのだけど、Flashのヘルプのこの部分はちょっとひどいと思うんだ。

class StaticTest
{
    static var message:String = "static variable";
    var message:String = "instance variable";
}
// スクリプト内で
var myST:StaticTest = new StaticTest();
trace(StaticTest.message); // 出力 : 静的変数
trace(myST.message);       // 出力 : インスタンス変数
ref.クラス定義

原文はこれ

class StaticTest
{
    static var message:String = "static variable";
    var message:String = "instance variable";
}
// In your script
var myST:StaticTest = new StaticTest();
trace(StaticTest.message); // output: static variable
trace(myST.message);       // output: instance variable
ref.Class definitions -- Flash CS3

もうそこを訳すんだったら、変数名も訳してくれればいいのに・・・。

Feb 072009

AS3での埋め込みフォントの共有について:其の伍[RSLの先読み対応 with Progression](多分解決)

さて、現実的に使うためにどーするか?ということを考えてみます。特にProgressionで・・・。

問題点としては
1)共有フォントの読み込みがドキュメントクラスのコンストラクタ前に発動してしまう。
2)ProgressionでRSLを配置するとCastDocumentの"_onInit"がロストしてしまう。
この2点をなんとか解決したいと思います。

2)はloaderInfoの"Event.COMPLETE"がRSLが存在すると発動しないというのが起因しているかと思います。(何故なのか?は不明。そもそもRSLのローディングが管理できないのでどーしていいのやら)
ということで、コチラは無理やり"CastDocument"のコンストラクタに

addEventListener(Event.ADDED_TO_STAGE, _onAdd);
として、_onInitに連結します。(override出来ないから)

これに関しては諸々調べていますが、問題が発生する可能性があるので、暫定的な処理とさせてください。実際にこの手法を用いる際にはリスクがあることをご理解の上、実装してください。(今のところ問題が発生するものとしないものの2つのパターンがあることは確認していますが、明確な切り分けは出来ていません。)

private function _onAdd(e:Event):void
{
	_onInit();
	removeEventListener(Event.ADDED_TO_STAGE, _onAdd);
}

一応_onInitの重複発動(Preloader経由だと"Event.COMPLETE"が発動するので)防止のために、"onInit"の最初に以下の一文を入れておく。

if (prog) return;
Continue reading AS3での埋め込みフォントの共有について:其の伍[RSLの先読み対応 with Progression](多分解決).

Feb 072009

AS3での埋め込みフォントの共有について:其の四[ランタイム共有ライブラリ+フォントクラス編](ちょっと解決)

吐き気がしてきました。
apeirophobia: AS3での埋め込みフォントの共有について:其の参[ランタイム共有ライブラリ編](未解決)の続きです。

前回かなり絶望的な結果で凹んでいたのですが、検証続行。

今度は基本に立ち戻り、ストレートに子swfでフォントシンボルをRSL化して、親swfと共有してみます。

1)子swfでフォントをシンボル化して、すべてのプロパティを有効に
090207b.jpg

2)これを親コピペして共有読み込みに。

3)共有化しているフォント名でそのままTextFormat指定。

問題となる親swf上での同一フォントの静止テキストはRSLのリンケージ名を使用して設定すればOK。

これまでのやり方に比べて超簡単。

ただし何故にこれをやらなかったかというと、フォントシンボルは実体が無いため、ドキュメントクラスのコンストラクタ発動前に強制的に読み込みが始まってしまう点。※1

※1
これはそのフォントを使用した静的テキストを含むオブジェクトがリンケージ設定で「最初に書き出し」になっている場合です。逆にどこにも使用されていない場合には明示的にそのフォントを使用した静的テキストを配置する必要があります。(そうしないとembed出来ない)
そしてそれがタイムライン上で認識された瞬間にFlashはRSLを含む子swfの参照、読み込みを開始します。既に認識されている(キャッシュに貯まっている?)場合は読み込みリクエストを出さない仕様になっていると思われます。(そのキーがリンケージURL?)

つまり和フォントとか埋め込んでいたら、3MBとかの外部swfの読み込みが完了しないとLoading表示できない・・・という部分。※2これはユーザに謎の空白の時間を与えてしまうことになりあまりよろしくない。ということでもう少し考えてみる。
少し使えるかもしれないサンプルはこちら。
www.img8.com/src/test_font6.zip

あと少しかなあ・・・。

※2
コンストラクタ前のLoadingを回避する方法としてはそのフォントを含むリンケージシンボルをタイムラインで後ろに配置してそこで実体化させる方法ですが、近年のOOPS化によるリンケージシンボルの増加を踏まえると作業効率的に現実的では無い。業界的にシフトしているPreloader化に従うべきかと。

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17  

Search and Archives

Tags