【Event】

EventサブクラスにtoString,cloneを追加しなければいけない?

Actionscript3

Essential ActionScript 3.0

「Essential ActionScript 3.0」を読みなおしていたらEventサブクラスにtoString,cloneを必ず(must)追加しなさい、って書いてあったのに気がついた、あらためてFlash CS3のヘルプをみてみると。

「toString() メソッドのオーバーライドを推奨しますが、必須ではありません。」だとか、LiveDoc

「Event サブクラスを作成する場合は、clone() と toString() メソッドをオーバーライドして、サブクラスに固有の機能を提供する必要があります。」とか書いてある。LiveDoc

あいかわらず分かりにくい説明でイライラさせられる。
toString,cloneを追加しておかないとカスタムEventの情報が正しく取得できなくなるヨなことなのでしょうか。
どっちみち自分で作って自分で使うのだからめんどうだったら作らなくてもいいことにしておいてあげる、なんでしょうネ。

ここはFlashの神Colin Moockさんの言うことを素直に聞いて、ちゃんと作ることにする。

public override function clone():Event {
	return new CustomEvent(type, bubbles, cancelable, [arguments]);
}
public override function toString():String {
	return formatToString("CustomEvent", "type", "bubbles", "cancelable", "eventPhase",[arguments]);
}

ちなみにflash.events.EventDispatcherを継承したorg.goasap.PlayableBaseのtoString関数はこんな感じ。

override public function toString():String {
	var s:String = super.toString();
	var addLast:Boolean = (s.charAt(s.length-1)=="]");
	if (addLast) s = s.slice(0,-1);
	if (playableID is String) s += " playableID:\"" + playableID + "\"";
	else s += " playableID:" + playableID;
	if (addLast) s += "]";
	return s;
}

このイベントでのbubblesは「prototype.js」でも悩んだけど説明を何度読んでも頭に入ってこない。使いどころはどこなんだろう。。

Bookmark and Share

Class内でstageプロパティがnullになる

Actionscript3

Sprite, MovieClipを継承したクラスでstageがnullになりアクセスできない。
Flashコンパイル時に以下のエラーが。
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

ステージにインスタンスを追加したことを確認した後で参照しないといけない様子。

package  {
	import flash.display.MovieClip;
	import flash.events.Event;
	public class SomeClass extends MovieClip {
		public function SomeClass(){
			super();
			addEventListener(Event.ADDED_TO_STAGE, init);
		}
		private function init(evt:Event) : void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			trace (stage.stageWidth);
		}
	}	
}

なるほどねって感じだったりするけど、Flashヘルプのstageが使われているサンプルスクリプトもエラーが出てちょっとハマった。

Bookmark and Share
WP Theme & Icons by N.Design Studio
RSS