Flash

IE で FlashTracer を使用する

FlashTracer を IE で使う方法。……という大げさな tips でもないが、IE に DebugPlayer が入っていれば、Firefox の FlashTracer ウィンドウに trace 内容が表示される。

Progression の Preloader で読み込み中のバイト数を得る

Progression の Preloader クラスで、読み込み中のバイト数を得る方法。seyself さんの記事を参考にした。 Preloader クラスは flash.display.Loader クラスを継承した ExPreloader クラスを継承している。 従って progress イベントが発生するので、それを…

flash.display パッケージを理解するためのメモ

flash.display パッケージを理解するためのメモ。ActionScript 2.0 の MovieClip が細分化された感じ。 import flash.display.*; DisplayObject 表示オブジェクトの基本クラス。抽象クラスなのでインスタンス化できない。 Bitmap ビットマップの表示クラス。…

協業のためのクラス設計

協業のためのクラス設計についての考察。 クラス毎に分業化する場合、 クラス名 API イベント プロパティ この 4 点について取り決めを行い、内部実装は各担当に任せる。 「目覚まし時計」を設計する例 クラス名 AlarmClock API setAlarmTime(time:Time):Tim…

コンテナ内の全ての子 DisplayObject を削除する方法

久々の Flash プロジェクトで ActionScript 3.0 のキャッチアップに忙しい。下手に ActionScript 2.0 を知っていると、逆にラーニングコストが上がる気がする。 さて本題。コンテナ内の全ての子 DisplayObject を削除するには、幾つか方法がある。Essential …

jQuery の $() の戻り値は jQuery オブジェクト

Prototype.js の感覚で jQuery の $() を使ったら詰まった。 SWFObject で貼り付けた SWF のメソッドを ExternalInterface で呼び出そうとして、 $("flashMovie").doSomething(); と書いたら、$("flashMovie") には doSomething が無いと言われる。 それもそ…

FlashPlayer 7 以下では fscommand を使う

Adobe - デベロッパーセンター : 外部APIを使用したFlashとJavaScriptの接続 FlashPlayer 7 以下では ExternalInterface が使えないので、Flash -> JavaScript の接続には getURL fscommand を使う。getURL はコードが単純になるが、IE でクリック音が鳴って…

続・ActionScript の辞書ファイル

追記 : 2008.05.08 ↓下記のサイトに置いてある辞書ファイルの方が性能がよいので、本サイトはスルーしていただいて構いません。 AS3 の辞書ファイル - PBD - subtech 追記ここまで ここの actionscript.vim からキーワードを抜き出して辞書ファイルを作った…

SWFObject の addVariable で渡す値は URL エンコードした方がよい

SWFObject の addVariable を使って何らかのパラメータを渡す際には、その値を URL エンコードした方がよい。 値に & などのスペシャルキャラクタを含むと正しく渡らない可能性があるからだ。 例えば、 so.addVariable("hoge", "http://example.com/?a=100&b…

XML を flashVars で与える

サイト構成に必要な XML ファイルを外部ファイルにせず、flashVars で渡すのも一つの手だろう。 so.addVariable("hoge", "<hoge>foo</hoge>"); 利点は、 通信コストが減る 非同期の読み込みイベントが減る 欠点は、 FlashIDE で開発時に、flashVars を読み込めない→スタブ…

サーバを経由せずに Flash の内容を画像に変換する

Flash で描画したベクター画像を img タグで表示させるデモを作った。肝はサーバプログラムを経由しないところ。 IE 以外のモダンブラウザなら、下の灰色の領域に線を描くと、その下に PNG 画像が現れるはず。 ペイントツール部分は、func09 さんのソースを…

Flash Player のバージョンチェックサイト

Flash Player Version Flash 開発者に嬉しい、バージョンチェック&リンク集サイト。バージョン情報をコピー&ペーストできるので、クライアントに確認してもらうときにもよい。adobe.com のバージョンチェックページでは、それができない。

SharedObject のデバッグツール

SharedObject のデバッグに SolVE を使っている。開発者は Darron Schall。 サイトによっては Unsupported type encountered -1 というエラーが出るが、幸いにも開発中のサイトでは発生していない。 TCSOFileReader.java を読むと readDataType メソッドに /…

JavaScript で SWF ファイルを読み書きする

3to2 に触発され、JavaScript で SWF ファイルを読み込んで中身を書き換えるデモを作った。 JavaScript で SWF を読み書きする (Firefox 限定) 主な仕組み XmlHttpRequest で SWF バイナリを読み込む (参考) SWF を解析する (3to2 などを参考) Base64 エンコ…

ExternalInterface で通信するデータの型に注意する

ExternalInterface で通信するとき、型に注意すること。 new Date("2007", "10", "7"); このコードは JavaScript で有効であり、ActionScript ではエラーになる。 年月日を文字列で渡してしまい、動かなくて困った。

ExternalInterface で大量のデータを渡すとクラッシュする

How to Speed Up Flash 8's ExternalInterface ExternalInterface を使って、Flash から JavaScript へ 30000 文字前後の巨大な文字列を渡したら FlashPlayer 8 がクラッシュした。 ちなみに、FlashPlayer 9 では問題ない。 原因は、ExternalInterface が内…

Date オブジェクトのパラメータ

Date オブジェクトのパラメータは、負の値も設定できる。Flex のフォーラムで知った。 var d = new Date(2007, 8, 21); //2007 年 9 月 21 日 var d = new Date(2007, 8, 0); //2007 年 8 月 31 日 var d = new Date(2007, 8, 21 - 365); //2006 年 9 月 21 …

複数のレイヤーをコピーしたいが、できない

Flash は、複数のレイヤーを一度にコピーすることができない。 例えば、_root に作ってしまった複数のレイヤー、複数のフレームに渡るアニメーションを、新規作成した MovieClip にコピーしたいというニーズが多々あるのに、できない。 いや、できないという…

ストレスフリーでライブラリのシンボルを編集モードにしたい

可能な限りライブラリパネルを触らず、頻繁に編集するシンボルにアクセスする方法を模索している。思いついたアイデアは以下の 2 点。 同一の .fla ファイルを複数ウィンドウで開いておく シンボルのブックマークを作る 同一の .fla ファイルを複数ウィンド…

Vim から JSFL を実行する

前エントリの派生で、Vim で編集中の JSFL ファイルを Ctrl-Enter で実行できるようにした。コマンドのテストが楽になって嬉しい。 Ctrl-Enter で JSFL を実行できるようにする JSFL の filetype を設定する。これは JavaScript のものをコピペでよい。 $VIM…

Vim から Flash のパブリッシュを実行する

Vim で ActionScript を編集中に、Ctrl-Enter を押すとパブリッシュされるようにした。Alt-Tab で Flash IDE に移動しなくて済む。 Ctrl-Enter でパブリッシュできるようにする filetype を設定済みなことが前提条件で、 $VIM/runtime/ftplugin/actionscript…

MXP ファイルの作り方

このブログでもこれまでいくつかの JSFL を公開してきたが、一般的に (?) は MXP 形式での配布が主流らしい。 ということで、MXP の作り方を調べた。 MXP ファイルの作り方 (JSFL コマンド) JSFL ファイルを作成する。 MXI ファイルを作成する。MXI ファイル…

配置されたシンボルがどのライブラリアイテムなのかを知りたい

配置されたシンボルが、ライブラリ内のどのアイテムなのかを知るには「シンボルの入れ替え」ウィンドウを開く。 もっと良い方法は無いものか。

コレクションの開始値

コレクションの開始値が 0 であったり 1 であったりと悩ましい。何が言いたいかというと、 hoge_mc.gotoAndStop(0); と書いていて、1 時間無駄にして悔しい (フレームは 1 始まり)。MovieClip のフレーム移動は、ラベルを使うのが鉄則なのだが、手を抜くとこ…

テキストフィールド内のリンクエリアが広すぎる

Flash 8 で、テキストフィールドに <a> タグを書いたところ、空白部分もリンクになってしまって困った。以下のようなコードで再現できる。 this.createTextField("my_txt", 1, 100, 100, 300, 100); my_txt.border = true; my_txt.multiline = true; my_txt.wor</a>…

選択されたインスタンスに、ライブラリ内と同じ名前を付ける JSFL

ステージ上で選択されたインスタンスに、ライブラリ内と同じ名前を付ける JSFL を書いた。 /** * 選択されたインスタンスにライブラリ内と同じ名前を付ける */ var selectedItems = fl.getDocumentDOM().selection; for (var i = 0; i < selectedItems.lengt…

シングルトンをグローバル変数の代わりにしない

現在作業中の Flash 案件で、画面上にユニークなものを全てシングルトンにしていたら、案の定「これはひどい」コードになりつつある。免罪符として、コメントに「これはひどい」と記しておいた。結論を言うと、意思決定力が弱いのに、設計しながらコーディン…

レイヤーを追加して this.stop(); を書く JSFL

デザイナから渡された .fla ファイルに「ラベルはついているが、stop() が書かれていない MovieClip」が大量にあった。これらの MovieClip をステージに配置した途端、アニメーションのループが始まってしまう。なんとしても、stop() を入れたい。 そこで、…

Reference 型が欲しい

Reference 型を使いたいシーンが多々ある。例えば以下のようなコード。 var hoge:Hoge = new Hoge(); var task:HogeInitTask = new HogeInitTask(hoge); これは、タスクで、Hoge 型の hoge を初期化するもので、タスクは任意のタイミングで実行される。タス…

Flash IDE の「ダウンロードのシミュレート」は使い物にならない

ダウンロードのシミュレートを行うと、グローバル変数やシングルトンがリセットされない。これは致命的。CS3 では解決したのだろうか。 5 1/2 blog のコメントを見ると、解決策が 2 つ上がっている。 System.capabilities.playerType で振り分ける delete 文…