Flash

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

Vim で F5 を押したときに FlashDevelop でパブリッシュが実行されるようにした。 autocmd Filetype actionscript nnoremap <buffer> <F5> :!start "wscript.exe" "C:/path/to/publish.js"<CR> publish.js var oShell = WScript.CreateObject("WScript.Shell"); oShell.AppAc</cr></f5></buffer>…

辞書ファイルを更新した

ActionScript 辞書をアップデート。既存のものに Gumbo の Language Reference のインデックスをマージした。 ActionScript 1/2/3 用の辞書ファイル

ソケット通信にもポリシーファイルが必要になった

Web サーバに置いた swf からソケットサーバに繋がらない事態に遭遇。下のようなエラーが出る。 Error #2044: ハンドルされていない securityError : text=Error #2048: セキュリティサンドボックス侵害 : http://xxx.xxx.xxx.xxx/foo.swf は xxx.xxx.xxx.xx…

簡易コマンド実行関数

簡易コマンド実行関数を書いた。理由は Tweener でシーケンシャルな処理をしたかったら。単純に動けばいいだけなので、AS2で。 private function executeFunctions():Function { var thisObject:Object = arguments[0]; var root:Function = arguments.calle…

特定のサイトでブラウザがクラッシュする

最近、Flash を使用している特定のサイトでブラウザがクラッシュすることが多い。IE と Firefox で起こり、それぞれ Flash Player のバージョンが違っていても起こる。Adobe には問題として報告されている。 Windows XP/IE 7/9,0,151,0 (Debug player) -----…

Fiddler で crossdomain.xml を書き換える

データ取得先のサーバに crossdomain.xml が無い、または自ドメインが許可されていない場合、プロキシサーバ (Fiddler) で crossdomain.xml を以下のように書き換えればよい。 <cross-domain-policy> <allow-access-from domain="*" /> </allow-access-from></cross-domain-policy>

キーフレーム毎に同じインスタンス名を付ける JSFL

同一レイヤのシンボルに同じ名前を付ける JSFL を書いた。トゥイーンアニメーションしている MovieClip があるとき、キーフレーム毎に名前を付けるのが面倒なので。 /** * 同一レイヤー上のオブジェクトに同じ名前を付ける */ var instanceName = prompt("se…

テスト用コードの消し忘れ防止

テスト用のコードを書くときは、末尾に trace を入れておくと消し忘れ防止になる。 hoge();trace("テスト用のコードが含まれています。");

AS 3.0 版、Date クラスの直感的なインタフェース

flash.utils.Proxy の習作として、以前書いた Date クラスの拡張を ActionScript 3.0 で書いてみた。 var d:SmartDate = new SmartDate(); trace(d); //Mon Sep 1 13:58:51 GMT+0900 2008 trace(d.yesterday()); //Sun Aug 31 13:58:51 GMT+0900 2008 trace(…

"ライブラリの中でASが書いてあるやつを調べる" を改良した

「ライブラリの中でASが書いてあるやつを調べる」を勝手に改良して、ルートのタイムライン (現在開いているタイムライン) の ActionScript も出力するようにした。 また、出力された ActionScript に余計な空行が入っていた (Windows の Flash CS3) のを削除…

静的クラスにイベントを送出させる

静的クラスにイベントを送出させるには、コンポジションを適用して、イベント周りの振る舞いを EventDispatcher インスタンスに委譲すればよい。これは静的クラスに限らず、既存のクラスを拡張する際に使えるテクニック。 以下、サンプルクラス。 package { …

IE に表示した Flash でリファラが取れない問題の回避方法

IE 6/7 に表示された Flash で navigateToURL を呼ぶとリファラが取れない (document.referrer === "" //true) 問題の回避方法。 アンカーエレメントをクリックしたことにする アンカーエレメントを作って click イベントを呼べば、リファラを取ることができ…

コンストラクタと初期化メソッドの書き方で悩む

コンストラクタと初期化メソッドの書き方で悩む。パラメータの初期化をコンストラクタで行い、その他の振る舞いを初期化メソッドで行う (下の例で 1 + 2) のがベストか? 1. コンストラクタ内完結型 恐らく最も一般的な書き方。 public function Hoge(p0:int…

パブリッシュ時にブラウザをリロードする

Vim で .as ファイルを保存時に、Flash をパブリッシュしつつブラウザをリロードするようにしてみた。元ネタは ||_koba_|| さんの発言。ちなみに Windows 限定。 手順 JSFL FileSystem API を入れる ブラウザをリロードする JScript を書く JScript を実行す…

複数版 Singleton パターン

リファクタリングを再読していて発見。P.179 に Singleton の複数版パターンがあった。抽象化すると単なる Hash なのだが、何かと使えそう。 以下、簡単なコード。 package { import flash.utils.Dictionary; public class Hoge { private var name:String; …

イベントドリブンのモデルには pull 型と push 型がある

Observer パターン、というか一般的なイベントドリブンのモデルには、pull 型と push 型がある。オブジェクト倶楽部の説明がわかりやすい。 pull 型 - Observer 側が通知受理時に情報を Observable 側に問い合わせる push 型 - Observable 側が通知時に情報…

便利なコメントのテクニック

地味に便利な ActionScript/JavaScript で使えるコメントテクニック。 実行するブロックを切り替える (参考) テスト用のコードを切り替えるときに便利。 //* doHoge(); /*/ doFoo(); //*/ この状態では doHoge() が有効で、先頭行のスラッシュを一つ取ると、…

コメントブロックを挿入する Vim スクリプトを書いた

ActionScript のコードにコメントブロックを挿入する Vim スクリプトを書いた。カーソル位置に任意の文字ブロックを挿入するスマートな方法がよくわからず、泥臭い書き方になった。 function! ASCommentWriter() let c = col(".") let l = a:firstline - 1 l…

String.replace の第二引数には置換関数を指定できる

String.replace の第二引数には、置換後の文字列を返す、独自の関数を指定できることを知った。目的にもよるが、グルーピングを使うときは RegExp.exec を繰り返すよりも使いやすい。 ただし、置換関数に渡される引数が可変で、いくらか複雑なので注意が必要…

== の代わりに === を使え

JavaScript: The Good Parts を斜め読みしていたら、面白いことが書いてあった。 比較演算子の == や != を、=== と !== の "evil twins" と呼び、"never use the evil twins" という。それはなんでかというと、型が違うときの評価が複雑だから。 以下のコー…

インスタンス名を入力するプロンプトを出すコマンド

選択されたインスタンスに名前をつけるためのプロンプトを出す JSFL を書いた。と言うのも、マウスでインスタンスを選択してから、プロパティタブのインスタンス名のテキスト入力にフォーカスするキーボードショートカットがわからなかったため。 ソースコー…

ライブラリを Unix コマンド風に操作するエクステンション

ライブラリのアイテムを Unix コマンド風に操作するエクステンションを作った。 デモとソースコード。 実装した機能は ls mv cp rm clear ファイル名のタブ補完 だけ。ディレクトリ構造を保持していないので cd は使えない。パーサらしきものは、スペースで …

TextField のキャレットを移動する

TextField のキャレットを移動するには、 tf.setSelection(tf.text.length, tf.text.length); setSelection の引数を同じ値にする。 LiveDocs によると、 2 つのパラメータ値が同じ場合は、caretIndex プロパティを設定した場合と同様に、このメソッドは挿入…

Array.sort と Array.sortOn は不安定なソート

ActionScript 3.0 の Array.sort と Array.sortOn は不安定なソートなので、オブジェクトのキーでソートする際には注意が必要。 price というメンバを持つオブジェクトを 100 個作って、price をキーにソートする例。まずは Array.sort。 var array:Array = …

流れるようなインタフェースを持つ Command

流れるようなインタフェースを持つ Command クラスを書いてみた。実装のポイントは以下の 2 点。 Command 自体にキューイングの機能を持たせた。 Composite パターンを適用した。 実行するとこんな感じになる。 普通に数珠つなぎで、 var hoge:Hoge = new Ho…

BulkLoader の type は指定した方がよい

BulkLoader でちょっとはまった。ファイルタイプを明示的に指定しないと、サーバプログラムが出力するファイルを取得できない (参考)。 // returning a simple text bulkInstance.add("http://mysite.com/top-ten.php", {type:"text"}); // returning a xml …

イベントをスルーするイディオム

今日知ったイディオム。なるほどと思った。 以下は、至って普通のコード。 package { import flash.events.*; import Hoge; public class Test { public function Test() { var hoge:Hoge = new Hoge(); hoge.addEventListener(Event.COMPLETE, trace); hoge…

LiveDocs をローカルに置く

追記 : 2008.05.21 Flex Builder が入っていれば、リファレンスの zip ファイルもインストールされている。Adobe.com に負荷をかけないためにもそちらを使うべき (参照)。恐らくトライアル版でも同様のファイルがあるはず (ライセンス的にはグレー?)。 追記…

ExPreloader で 読み込み先 SWF ファイルの参照を得る

Progression の 標準的な Preloader(ExPreloader) 内で、読み込み先の index.swf の参照を得たい。 なぜかというと、preload が終わった時点で index.swf を自動再生するのではなく、ExPreloader 自身が index.swf の再生を制御したいから。 flash.display.L…

import しているファイルを開く

gf を ActionScript の import 文で使うための設定をした。 import com.example.bar.foo.Hoge; この一行の上で gf を押したら com/example/bar/foo/Hoge.as が読み込まれる。 ActionScript の文法は Java のそれに似ているので Java でそういった tips があ…