Twitter・ニコニコ動画のブログパーツやPHP・Flash・ActionScriptのお話の国。 cross clover へようこそ。


Blog

[AS3.0] MouseEvent時のtarget指定

完全に個人用の覚書(笑)

MouseEvent時のtargetで意図したMovieClipが指定されずに困ってたのが解決できたのでメモ。
そもそも子に[InteractiveObject](DisplayObjectContainerやTextFieldなど)を持つかどうかでイベントのターゲットが異なるようでよく起こりうる話。

以下簡略化したコードサンプル。
そのままコピーしても動かないです。

[変更前]
var mc : MC01= new MC01(); // 任意のMC
var mc_child : MC02= new MC02(); // InteractiveObjectを持つMC
mc.addChild( mc_child );
addChild( mc );

mc.addEventListener( MouseEvent.CLICK, mouseClick );

function mouseClick ( e : MouseEvent ) : void {
 trace( e.target ); // [mc_child]
}

そんなときは1行追加するだけで解決。

[変更後]
var mc : MC01= new MC01(); // 任意のMC
var mc_child : MC02= new MC02(); // InteractiveObjectを持つMC
mc.addChild( mc_child );
addChild( mc );
mc.mouseChildren = false; // ここを追加

mc.addEventListener( MouseEvent.CLICK, mouseClick );

function mouseClick ( e : MouseEvent ) : void {
 trace( e.target ); // [mc]
}

最近知らないプロパティがたくさん出てきて覚えるのが大変。


 

[AS3.0] rootの変数にアクセスする

一般常識なのかもしれないけど、知らなかったのでメモ。

AS2なんかだと簡単にアクセスできてたrootの変数にアクセスできなくて困ってたのであれこれ調べたりやってみたりしてて、ようやく謎が解けた。

[AS2]
_root.variable = "hogehoge";

[AS3]
MovieClip(root).variable = "hogehoge";

MovieClip か Object にキャストしてやるとアクセス出来るようになるみたい。
そんなんわかるかー!ヽ(#`ロ´)ノ(笑)


[AS3.0] 外部XMLの読み込み

XMLの読み込みなんかは、よく使う処理なのでクラス化して使う方が便利。
CMSツールなんかでXMLを書き出して、それを利用するなんかはよくみる手法ではないかと思います。

TwitteenNicoRankingでも使っています。
XML形式のデータはすごく扱い易くて便利ですよー。

と、言ったところでコードサンプル。

package {

  import flash.net.URLLoader;
  import flash.net.URLLoaderDataFormat;
  import flash.net.URLRequest;
  import flash.events.Event;
  import flash.events.EventDispather;
  import flash.system.System;

  public class XMLLoader extends EventDispatcher {
    var urlLoader : URLLoader;
    var xml : XML;

    /*
     * コンストラクタ
     */
    public function XMLLoader ( _url : String, _isUnicode : Boolean = true ) {
      urlLoader = new URLLoader();
      urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
      urlLoader.addEventListener( Event.COMPLETE, urlLoaderCompleted );

      System.useCodePage = ! _isUnicode;

      urlLoader.load( new URLRequest( _url ) );
    }

    /*
     * XML読み込み完了時
     */
    private function urlLoaderCompleted ( e : Event ) : void {
      try {
        xml = new XML( urlLoader.data );

        dispatchEvent( new Event( Event.INIT ) );
        dispatchEvent( new Event( Event.COMPLETE ) );
      } catch ( e : TypeError ) {
        trace( e.message );
      }
    }

    /*
     * XMLデータを取得
     */
    public function get data () : XML {
      return xml;
    }
  }
}


上記コードを[XMLLoader.as]の名前で保存、インクルードしていると仮定した状態でのサンプルがこちら。

var xmlLoader : XMLLoader = new XMLLoader("XMLファイルのURL", true);
xmlLoader.addEventListener( Event.INIT, function ( e : Event ) : void {
  var xml : XML = xmlLoader.data;
  // 以下省略
} );


このように1行でXMLデータの取得が可能です。
あとはイベントリスナーの中で好き勝手データを触ることができるます。

例えばRSSデータならXMLListに格納してfor eachで回すなどで自由自在に扱えるはず。


[AS3.0] Progression (1)

最近Progressionの名前をよく見かけるのでちょっと触ってみようと思ってメモ。
と言ってもまだ環境設定しただけで、なんにも作ってないからインストール設定までを覚書。

開発環境は Windows7 / Adobe Flash CS3 / Progression 4.0.1 RC1 なので、
もし参考にされる方がいらっしゃるようでしたら適当に置き換えて読んでください。

Progression - Framework for Flash > Progression 4 RC
Progression - Framework for Flash > ドキュメント


photo
FLASH OOP for ActionScript 3.0
翔泳社 2008-07-03
売り上げランキング : 127555

by G-Tools , 2010/04/13


続きを読む


[AS3.0] BitmapDataの透過

知らなかったのでメモ。

/*
* width : int 横幅
* height : int 縦幅
* transparent : Boolean 透過するかどうか
* fillcolor : uint 背景色
*/
var bmd : BitmapData = new BitmapData( 300, 300, true, 0xffffff );
bmd.draw( hoge ); // hogeは適当なMC
addChild( new Bitmap( bmd ) );

これで300x300の背景透過Bitmapを表示、らしい。
今まで第3引数をfalseにしてた。
そりゃ透過しないわけだよ!

差し当たってTwitteenの一覧表示タイプに適用してみた。
時間とツイートが重なっても見えるようになったはず。


Index of all entries

twitter

Recent Comments

  • YOU: サーバ移転後のコメン read more
  • YOU: >すいさん こんにち read more
  • すい: はじめまして。 tw read more
  • Tr: 回答ありがとうござい read more
  • にょぞみ: こんにちは。 いつも read more
  • YOU: ツイートの取得は全て read more
  • Tr: 昨日からツイッターを read more
  • にょぞみ: ご報告遅れてすいませ read more
  • YOU: Flashのせいか、 read more
  • 遊民。: ソースを眺めていて、 read more