ホーム > タグ > Flash

Flash

wonderflでtrace

LocalConnectionいじくり回せばできるんじゃね?ってことで作ってみた。

オンラインtrace – wonderfl build flash online

仕組みは簡単。
TextFieldだけのswfを別ウインドウで開いて
LocalConnectionでテキストを送信。
別ウインドウのswfの方で表示。

コネクションIDをurlに付けてjsで受け渡しししたり、
navigateToURLでウインドウ開くまでタイムラブがあったりするので
いろいろごにょごにょしてたりするけど。

ただ、safariだと

navigateToURL(new URLRequest(_url), "newwin");


で一度開いたウインドウがリロードされずに新しくウインドウが開く。激しくウザイ。

まぁ、おとなしくdebag playerつかえってことですかね。

クライアント側のソースもwonderflにのせときます。

オンラインtraceのclient側 – wonderfl build flash online

swfのキャッシュにはまる

特定の環境下でflashが正常に表示されない現象に遭遇。

イロイロしらべた結果、
どうもEvent.COMPLETEとキャッシュっぽい。

参考
LoaderInfoでキャッシュがある時の動作について

※ちなみに上記記事にはifの分岐に誤りがあって正しくは

if(info.bytesLoaded == info.bytesTotal){
	init();
}else{
	info.addEventListener(Event.COMPLETE,onCompleteFunc);
}

バグが発生する条件は確認できた限りで

  • IE7/6
  • Flash Player9.045
  • Objectタグを直接htmlに記述
  • IEの設定でキャッシュを有効にする

以上の組み合わせの時。

SwfObjectを使えば発生しないのでオーサリング/テスト時に全く気付かなかった罠。

タイムラインアニメーション用のThread(そうめん)

自作で便利だったので公開。
タイムラインでアニメーションするMovieClipを再生。
停止を待つThread(そうめん)用のスクリプト。

package {
    import flash.display.DisplayObject;
    import flash.events.Event;

    import org.libspark.thread.IMonitor;
    import org.libspark.thread.Thread;

    public class TimelineThread extends Thread {

        private var _mc:DisplayObject;
        private var _frame:*;

        public function TimelineThread(mc:DisplayObject,frame:*=1) {
            _mc = mc;
            _frame = frame;
        }

        public function cancel():void {
            interrupt();
        }

        override protected function run():void {
            interrupted(interruptedHandler);
            _mc.gotoAndPlay(_flame);
            event(_mc, Event.COMPLETE, completeHandler);
        }

        private function completeHandler(e:Event = null):void {

        }

        private function interruptedHandler():void {
            _mc.stop();
        }
    }
}

親のThread内で

var _timelineThread:TimelineThread=new TimelineThread(button_mc, 2)
_timelineThread.start();
_timelineThread.join();

としてムービークリップへの参照と、再生したいフレーム(数値 or フレームラベル)を渡す。

ムービークリップ内で次の処理に移行したいフレームにEvent.COMPLETEを記述。

this.stop();
dispatchEvent(new Event(Event.COMPLETE));

アニメーションを止める必要が無ければthis.stop();はいらない。

BeTweenAS3のtransition

BeTweenAS3ではeasingのBackとElasticについて
それぞれイージングの調節が出来るようになっている。

Backの場合、以下のプロパティが用意さている。

Back.easeInWith(s:Number = 1.70158)
Back.easeOutWith(s:Number = 1.70158)
Back.easeInOutWith(s:Number = 1.70158)
Back.easeOutInWith(s:Number = 1.70158)

例えば

BetweenAS3.tween(box, {x:400},  null, 10, Back.easeOutWith(3.5));

て感じで指定するとBackの振れ幅が大きくなる。
デフォルト値は1.70158。

Elasticの場合も同様。ただしこちらは引数が2つ

Elastic.easeInWith(a:Number = 0, p:Number = 0)
Elastic.easeOutWith(a:Number = 0, p:Number = 0)
Elastic.easeInOutWith(a:Number = 0, p:Number = 0)
Elastic.easeOutInWith(a:Number = 0, p:Number = 0)


aとpは amplitudeとperiodかな。
http://blog.nipx.jp/2008/04/elastic-transition-amplitude-p/

forked from: 2. Tween parameters with BetweenAS3 – wonderfl build flash online

ちなみにTweenerでも同様の調整が出来るそうで。
http://saqoosha.net/2008/02/19/641/

psdデータからFlashを作成する際の注意点

PSDのデザインデータをデザイナーさんから頂き、
Flash化した際にPhotoShop上のデザインとFlashとで色が違うと言う事がたまにある。

Bitmapのデータだけでなく、色を16進数で指定しても微妙に色が違う。
こうなるとWeb用に保存しても、FireWorksで開いてもPhotoShopの色は再現されない。

色々と試して何とか回避方法が見つかったのでメモ。
バットノウハウかもしれないし、Mac、シネマディスプレイ、CS3の方法しかしらない。
できればデザイナーさんと一緒に見て色の整合性を取るのが安全だと思う。

  1. ビュー > 校正設定 > モニタRGB
  2. 編集 > プロファイルの変換 > 変換後のカラースペース にCinemaを選択(多分、使っているモニタのプロファイルを選択すれば良いのだと思う)
  3. 編集 > プロファイルの指定 > 作業用RGB:sRGB IEC61966-2.1 にチェックしてOK
  4. ビュー > 校正設定 > モニタRGB

以上。

以下にPhotoShopのキャプチャとそのまま書き出したgif、上記の手順を加えた後書き出したgifを掲載する。
見比べてみると後者の方がPhotoShopの状態に近い。

PhotoShopのスクリーンショット
PhotoShopのスクリーンショット

そのままgifで書き出し
そのままgifで書き出し

上の手順を試してからgifで書き出し
上の手順を試してからgifで書き出し

Home > Tags > Flash

Search
Feeds

Return to page top