MAIN

FLASH ARCHIVE

October 22, 2006

bitmapObj.clone();処理が重くなるのを回避

今やってる案件で背景をすべてをBitmapData処理をしなくてはいけない感じになっていて処理が重くて困ってたけどなんとか解決したのでメモ。

毎フレームのbitmapをclone()で一時保存して画像加工してからdraw()というパターンの処理はよくやるんですが、フルスクリーン表示などでサイズが大きいbitmapをclone()するとガクガクにコマ落ちしてしまって困ってました。SWFを埋め込んだ場合、ユーザの画面解像度に処理速度が激しく左右されて今います。あれやこれや悩んだけど、以下の方法で簡単に解決(回避?)できました。

描画用のBitmapDataのwidth*heightを1024*768など適当なサイズに決めうちでattachBitmap。次にStage.widthかStage.heightが描画用のBitmapDataよりも大きかったら、BitmapDataスケールをStageのサイズに合わせて拡大。

これだけです。当たり前だけど「500*500のBitmapをコピーして1000%に拡大」と「5000*5000をそのままコピー」じゃ前者の方が軽いんですね。きれいな画像を求められる時は意味ないけど、今回はこれで十分たすかりました。


November 12, 2006

翌日が知りたい

Flashなど「である日の翌日」を求める時にいつもどうすればいいんだろうと思っていましたが解決したのでメモメモ。これって常識な気もするし、頻発しそうなものだけど今まであんまり考えたことなかったなー。


var aDay:Number=86400000;
var dateObj:Date=new Date(2006,6,16);
trace("ある日は : "+dateObj) // ==> ある日は : Sun Jul 16 00:00:00 GMT+0900 2006
dateNum=dateObj.getTime();
dateNum+=aDay;
dateObj.setTime(dateNum);
trace("ある日の翌日は : "+dateObj); // ==> ある日の翌日は : Mon Jul 17 00:00:00 GMT+0900 2006

こんな感じ。
・取得した日付に1日(86400000ミリ秒)を足す。
・結果をsetTimeを使って再設定してあげる。
これでうるう年とか、うるう秒とかよくわかんないそこら辺の事情も解決なのかな。

しかもif文はDetaオブジェクト同士を比較できるのか!
これすごいな、便利だな。しかしおれは何も知らないな。

November 15, 2006

sendAndLoad時にもキャッシュ!

また自分の無知さがあらわに。
Flashからxmlなど外部の最新のデータを受け取りたい時に
よくキャッシュ対策でランダム値を与えることがあります。

var xmlURL:String="hagihagi.xml?"+Math.floor(Math.random()*100000);

ぼくはおろかなので、
phpへsendAndLoadする時にもこのキャッシュが効くということを知りませんでした。
つまり、まったく同じ内容のLoadVarsをサーバーサイドに送ると
結果がキャッシュから返ってきてしまうということです。
LoadVarsにランダムな変数をくっつけてあげることでこのキャッシュも回避できました。

var lv:LoadVars = new LoadVars();
lv.ram=Math.floor(Math.random()*10000);
lv.nanikaA="なにかの値A";
lvnanikaB="なにかの値B;
lv.nanikaC="なにかの値C";

November 17, 2006

traceについて考える

細かくtraceを書いて出力するようにすると
デバック時にいろいろ便利で悩まされることもぐっと少なくなるのですが、
ただ出力される量が膨大になりすぎて、
何が必要な出力がわからなくなることがあるので
まとめて優先順位つけられるようにしました。
コンストラクタで重要度を10段階で設定して、
それ以上の重要度を持ったものだけ出力するかんじ。
trace文の表示を整えて
オブジェクトの中身も表示できるようにしたりしたら便利そう。
そのうちこういうソースも公開できるようにしたいです。

ver hagi:hgTrace=new hgTrace(★);
hagi.traceEx(☆,◆);
★ : 設定した重要度 (0-9)
☆ : この出力の重要度 (0-9)
◆ : 出力する内容

December 1, 2006

FlashからCookieを使う利点

最近の案件で実験的にFlash+javascriptを試しています。
基本的に両方とも文法自体は似てるのでなのでさほど抵抗がないのですが
javascript側はクロスブラウザの観点からいろいろ気を使います。

その案件でFlashからCookieを使ってデータのやり取りをしてますが、
これは使い方次第で個人サイトでも可能性があるような気がしています。
FlashにもSharedObjectクラスという便利なのがあるけど、
Cookieを使うと別個のswfから同じローカルデータを参照できたり、
保存しておくディレクトリレベルを簡単に設定できたり
javascriptと組み合わせるとこれはこれで便利です。

実際はcookieの名前とか、有効期限とか
いろいろ調整しないと動作しないんですが
保存方法はすごく簡単でだいたい2ステップです。

1.Flash側からgetURL(javascript:setCookie(保存したい値));
2.javascript側でfunction setCookie(str){ document.cookie = str; }

上記、某案件がロンチしたらちゃんとまとめでソースあげてみようと思います。
(といってもプロフェッショナルな方から見れば単純なのモノだと思いますが。)

February 8, 2007

gotoAndPlay(2)が動かない

Flashの自分がよくやるミスシリーズのメモ。
最初なのでgotoAndPlay()です。
親swf( "親" )から子swf( "子" )をロードして、
ロード完了直後に"子"に設置したシンボルをいきなり動かそうとして陥ります。。

EntryMore ! "gotoAndPlay(2)が動かない" »

June 14, 2007

ActionScript3.0 Animation

510R07FqCbL._SS500__300.jpg
ActionScript3.0 Animation
アマゾンでアメリカからシドニーまで約1ヵ月…
ようやくこちらにも届きました。
Amazon.co.jpだと5,032円しているので、
日本で買う場合もamazon.comからシッピングした方が安いかもです。

ささっと流し読みした感じだと洋書ながらなかなか解りやすいです。
基本的にコード解説だし英単語数も多くないです。
開発環境が何がベストか未だによく解らないけど、
これからAS3もやっていこうと思います。

MX2004対応のあの赤本のAS3バージョン出ないかなー。
基本的なクラスと関数とプロパティでいいので
一通りを網羅した辞典的な本が欲しいです。

August 22, 2007

FlashDevelopのショートカット

こういうエディタはショートカットしてなんぼな気がするので
FlashDevelopの便利そうなショートカットをまとめてみます。
主観で自分の使うものだけ。


// 探す系
Crtl+F2 : 行に目印をつける/取る
F2 : 次の目印に移動
Shift+F2 : 前の目印に移動


// 新規ファイル系
Ctrl+1 : 新規AS2ドキュメントを作る
Ctrl+2 : 新規AS3ドキュメントを作る
Ctrl+3 : 新規mxmlドキュメントを作る
Ctrl+4 : 新規htmlドキュメントを作る
Ctrl+5 : 新規xhtmlドキュメントを作る
Ctrl+6 : 新規csslドキュメントを作る
Ctrl+7 : 新規phpドキュメントを作る
Ctrl+8 : 新規xmlドキュメントを作る

Ctrl+Shift+N : 現在のドキュメントを複製(類似したクラスなどを作るときに便利?)

// 編集系
Ctrl+Q : カーソルのある行を//でコメントアウト
Ctrl+Shift+B : /* */ でコメントアウト(複数行選択時)

// 挿入系
Ctrl+B : Snippetを表示(for文など突っ込める)
Ctrl+Shift+K : 16進数カラーを挿入(便利)

ちなみver3 beta2です。

October 25, 2007

ActionScript3 + Flash Media Server2

AS3 + FMSでつながらんつながらんと思ってたら、これでした。(Flex2のリファレンス

NetConnection.defaultObjectEncoding = ObjectEncoding.AMF0;

NetConnectionのデフォルトのエンコード設定をFlashPlayer8以降のAMF0にしましょうというやつです。
っていうかSharedObject使うときもgetRemoteでnullしかもどってこねえ。
ということでここらへん一括でやったほうがいいですね。
NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
NetStream.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
SharedObject.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;

November 14, 2007

ActionScript3 + Flash Media Server2 + SharedObject

AS3とFMSを引き続き続けています。
わかんないこと多すぎます。
SharedObjectをgetLocalで使用するときは
mySo.data.hogehoge = 'hagiwara';
とdataオブジェクトのプロパティみたいに登録できるのに
getRemoteでFMSに保存するときは
mySo.setProperty('hogehoge','hagiwara');
とメソッドで渡してあげないといけないんですか?
他に方法ってあるんでしょうか?

根本的にわかってないのかな? 一応下のようにやって動きました。

private function getRso():void
{
rso = SharedObject.getRemote("so", nc.uri);
rso.addEventListener(SyncEvent.SYNC, onSyncMsg);
rso.connect(nc);
}

private function onSyncMsg(e:SyncEvent):void
{
trace(e.target.data.hogehoge+' was changed');
}

private function setRso():void
{
var words:String = 'aaabbbcccddd';
rso.setProperty("hogehoge", words);
//以前のrso.data.hogehoge = words;の形ではリモート共有オブジェクトは記録されません。
}

February 1, 2008

FMSで困ったこと(2こ)

先月あたりからFlash Media ServerのDeveloper Editionを触っていました、
そこで2箇所のミステリーがありました。

まず10コネクションまでしかつなげられないとは聞いておりましたが、
10コネ以上つなげてもエラーが出るわけでもなく
コンソールからアラートがトレースされるわけでもなく
ただ単にrejectされて動かなくなります。
こうなってしまうとresetするだけでは復活しなくて
FMS自体を再起動しないといけなくなります。
再起動は微妙に時間がかかります。
ちなみにコンソールも1コネクション分カウントされてしまいます。

つぎ、
FMSアプリケーション側から

application.onConnect = function(userObj, userName)
{
trace( 'New user is:' + userName );
if( userName != 'hacker' ){
application.acceptConnection(userObj);
}else{
var eMessage = new Object();
eMessage.message = "u_r_a_hacker";
application.rejectConnection(userObj, eMessage);
}
}

とかやってhackerさんからの接続を解除したとしても
コンソールのUserCountは増えたままで減らないです。
なのですぐに10コネクションをオーバーしてボカン。
application.clients.lengthではカウントされてないんです。

こういう場合hackerさんのSWFを閉じればコンソールのUserCountも減ります。
どこかでnetconnectionが生きてしまっているのでしょうか?
そしてFMSはどこのコネクトをカウントしてるんですか?

ちなみにhackerさんのSWFからnetconnection.close()を叩いて
能動的に接続解除すればそんなことにはなりません。
あくまで受動的にFMSからconnectをrejectされた場合のみです。

EntryMore ! "FMSで困ったこと(2こ)" »

December 17, 2008

Wonderfl


これ継続されていけばおもしろくなりそうですね。サービスとつながりかたがしてしっかりしてくるといろいろ可能性がありそうです。

About FLASH

Archive of FLASH

Previous is EVENT.

Next is LAB..

Powered by
Movable Type