タグ

ブックマーク / www.be-interactive.org (12)

  • BeInteractive! [Loader と ApplicationDomain による実行時クラス置換]

    最近、告知と勉強会エントリばっかりでしたが、タイトル通り、ActionScript でクラス置換風なことが出来ることに気付いたので、まとめてみます。この手法を使うと、任意の SWF 内で使用されているクラスを、自分で用意した別のクラスで置き換えて実行することが出来ます。ポイントは、その任意の SWF をパブリッシュしなおしたりだとか、バイトコードでどうこうだとかそういったハックの類を使わなくてよく、一切弄る必要がないところです。 サンプルを Spark project にコミットしたので、これを見ながら読み進めて下さい。 http://www.libspark.org/svn/as3/RuntimeClassReplacement/ まず、以下のような Context クラスと DocumentRoot クラスで構成された、contents.swf があります。 src/org/libsp

  • BeInteractive! [[dotfes] 「FlashPlayer10 のじかん」発表資料]

    FlashPlayer10 が正式にリリースされた今日この頃、皆様いかがお過ごしでしょうか。以前お伝えした通り、先日行われた「dotFes」というイベントで、FlashPlayer10 について喋ってきたのでその発表資料を公開します。主に新機能についてスクリプト面から迫ってみました。 http://www.be-interactive.org/works/dotfes/slide.pdf 当日は予告通り、先生コスプレ (普段着ないスーツ) で行ったのですが、新人研修だの教育実習だの言われてとても残念でしたよ!イベント自体は楽しかったですけど。

    secondlife
    secondlife 2008/10/17
    GJすぐる。id:yossy44++
  • BeInteractive! [早速 AIR で FlashPlayer を作ってみた]

    何を言っているのか分からないと思いますが、次のAIRアプリケーションをインストールして実行してみてください。 http://www.libspark.org/svn/as3/swfassist/trunk/samples/swfplayer/bin/SWFPlayer.air 実行するとウィンドウが現れるので、そこに何かアニメ的なSWF(ex: 魔理沙は大変なものを〜)をドラッグ&ドロップしてください。すると、しばらくした後、次のような感じでムービーの再生が始まります。 色々面倒なので線だけですが、全てActionScriptで描画しています。内部的にはswfassistを使っています。ソースはこちらにありますので、興味がある人はどうぞ。

  • BeInteractive! [AS3で、どこでも簡単にスタックトレースを取る] flash actionscript

    「この関数一体何処から呼ばれてんだよ!!」って思う事ありますよね。そんなとき、以下のコードで簡単にスタックトレースを取る事が出来ます(デバッグプレーヤーのみ)。 trace(new Error().getStackTrace());

    secondlife
    secondlife 2007/12/13
    エラーを起こして getStackTrace する。debug ver 以外でもつかえたら変な使い方できそうだったんだけど、残念(ぇー
  • BeInteractive! [URLLoaderThread]

    id:secondlifeの人が、スレッドライブラリのバグフィックスとThreadURLLoaderの追加をしてくれたので超嬉しい。 そこで、俺もURLLoader用のスレッド書いてみた。こっちは、ロードが完了すると勝手にスレッドが終了するのでjoinと組み合わせると便利なのと、エラーイベントが起こった場合に例外を投げてくれるので親切です。独自スレッドの実装のサンプルにもなると思うので、いつもより多めにコメントつけといた。 http://snippets.libspark.org/svn/as3/Thread/src/org/libspark/net/URLLoaderThread.as で、実際にこれを使うサンプルはこれ。 http://snippets.libspark.org/svn/as3/Thread/samples/urlloader/ ただ AS3 はかなりの処理が

    secondlife
    secondlife 2007/12/13
    なるほどー。こういう実装かぁ。ssg
  • BeInteractive! [AS3でも他のクラスからprivateなメンバにアクセス出来る可能性が開けた]

    発見しました。 AVM2(FlashPlayer9)では、ランタイム時の型チェックが厳しく、privateなメンバにはどうやってもアクセス出来ませんでした。これが超内部的なレベルでチェックが行われていたとすると、もはやどうしようもないんですが、実はそうではないことに気付きました。 AVM2は、メンバを参照するときに、内部的に「ネームスペース + メンバ名」という形の参照の仕方をします。例えば、「A::public + hoge」(Aクラスのpublicなhoge)「A::private + fuga」(Aクラスのprivateなfuga)といった具合です。 これから分かるように、privateなメンバにアクセスする際は「クラス名::private + メンバ名」という形を取ればいいことになります。普通にSWFをコンパイルすると、自分のクラス以外ではこの形式のコードは生成出来ないのです

    secondlife
    secondlife 2007/09/18
    ワオー
  • BeInteractive! [BitmapDataを簡単にマスクする方法]

    既出な気もしないでもないのですが。BitmapDataを思い通りの形にくりぬく、というのをカンタンにやる方法です。 コードは次の通り。 source.copyChannel(mask, mask.rect, new Point(0, 0), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA); source、mask共にtransparent = trueなBitmapDataです。sourceには元となる画像を予め描画しておきます。そして、maskの方は0x00000000で塗りつぶした後、くりぬきたい形(例えば丸とか星とか)をdrawしておきます。これで上のコードを実行すると、maskのアルファチャネル値が全てsourceの方にコピーされるので、うまいことmaskの形にくりぬける訳です。sourceが何度も更新される場合でも、mas

  • BeInteractive! [知っていると得をするBitmapData.lock/unlockメソッド]

    なんか技術系の話題は久々? 今日ご紹介するのはBitmapData.lock/unlockメソッドですが、皆さんご存知でしょうか。ドキュメントを見ると、 この BitmapData オブジェクトが変更されたときに、BitmapData オブジェクトを参照するすべてのオブジェクト (たとえば Bitmap オブジェクト) が更新されないように、イメージをロックします。パフォーマンスを向上させるには、setPixel() メソッドまたは setPixel32() メソッドを何度も呼び出す前後に、このメソッドを unlock() メソッドとともに使用してください。 と書いてあります。 多分ほとんどの人がBitmapDataを表示するために、addChild(new Bitmap(bitmapData))とかやってると思いますが、実はsetPixelやsetPixelsをすると、画面の表示

  • BeInteractive! [「AVM2にAVM1のSWFを強引にロードするやり方」の解説]

    fladdictのTakaさんが、「AVM2にAVM1のSWFを強引にロードするやり方」というのを紹介しているので、これが一体何をしているのか勝手に解説。 まず、 ・ByteArrayの[3]番目のインデックスを9に書き換える。 ByteArrayで3番目のインデックス、つまり4バイト目の値は、SWFファイルのバージョン番号が入っています。恐らく、Flash8で書き出したなら「8」が入っているはずです。AVM2対応なのはバージョン9のSWFからなので、このバージョン番号の部分を「9」に書き換えます。 次に、 ・ByteArrayのインデックス20~30あたりのどっかに、01, 00, 44, 11, 00 という順番にintが並んでいる場所があるので見つける。 ですが、最初の 01, 00 の部分(20~21バイト目固定)は、フレーム数です。メインタイムラインのフレーム数が1の

  • BeInteractive! [ASライブラリ作る時]

    id:secondlifeの人が面白そうなキーイベント監視ライブラリを公開してる!折角なのでSpark projectに入れませんか。AS3らしく、ネームスペースを活用する方針。イベントハンドラにネームスペースを使うのはいい方法だと思う。あと、状態遷移(Stateパターン)を実装するのにネームスペース使っても面白いと思う。 で、エントリの最後の方に書かれてる、Flex Builder2でActionScriptライブラリプロジェクトを作る時、swfとして走らせられないのでテストが実行できないという話。これは俺も悩んでて、Sparkのプロジェクトでは、各プロジェクトごとに開発&テスト実行用のActionScriptプロジェクトと、swc吐く用のActionScriptライブラリプロジェクトの2立てをするというかなり泥臭い構成。やっぱりAntとか使うしかないのかなぁ。教えてJavaな人とか

  • BeInteractive! [AOContainerやXelfで使用するクラスの宣言]

    今のところ、ソースコード中に次のように書いて、必ずクラスがSWFに含まれるようにしてね、と言ってましたが、 PlayerTask; ActorViewTask; ShotTask; KeyboardInputTask; MouseInputTask; コンパイラオプションの「includes」を使って埋め込むクラスを指定したほうがいい感じですね。 具体的には、「include-config.xml」とかいう名前で、プロジェクト内に次のようなXMLファイルを作成して、 <?xml version="1.0"?> <flex-config xmlns="http://www.adobe.com/2006/flex-config"> <includes> <symbol>PlayerTask</symbol> <symbol>ActorViewTask</symbol> <sy

    secondlife
    secondlife 2007/04/16
    includes コンパイラオプション
  • BeInteractive! [AS3で独自メタデータの保持]

    そういえばFlex Builder 2.0.1から、やっと独自のメタデータの保持が出来るようになりました。 コンパイラオプションに、 -keep-as3-metadeta Hoge Fuga と「keep-as3-metadata」オプションに続けて保持させたいメタデータ名を列挙するか、 <?xml version="1.0"?> <flex-config xmlns="http://www.adobe.com/2006/flex-config"> <compiler> <keep-as3-metadata> <name>Hoge</name> <name>Fuga</name> </keep-as3-metadata> </compiler> </flex-config> という設定ファイルを「metadeta-config.xml」等の名前で作って、コンパイラ

    secondlife
    secondlife 2007/03/27
    おおお、これでリフレクションが断然しやすく
  • 1