« AS3.0がきた | TOP | Flexが »

AS3.0 event.target

昨日のAS2.0のコードですが


function layout(){
attachMovie("square","sq1",1);
_root.onEnterFrame = moveX;
}
function moveX(){
sq1._x += 1;
if(sq1._x > 100){
removeMovieClip("sq1");
}
}
layout();

こんな書き方の方が望ましいですね。


function layout(){
attachMovie("square","sq1",1);
sq1.onEnterFrame = moveX;
}
function moveX(){
this._x += 1;
if(this._x > 100){
removeMovieClip(this);
}
}
layout();

Mcの参照にthisを使えばmoveX()は使いまわしが効くわけで。
sq1のonEnterFrameにmoveXを当てているのでthis=sq1になりますよね。
ところがAS3.0で同じようにthisを使うと

var sq1:Sprite;
function layout(){
sq1 = new square();
addChild(sq1);
sq1.addEventListener(Event.ENTER_FRAME,moveX);
}
function moveX(event:Event){
this.x += 1;
if(this.x > 100){
removeChild(this);
this.removeEventListener(Event.ENTER_FRAME,moveX)
}
}
layout();

thisがsq1を参照せずMainTimelineを参照します。
AS2.0のようにthisが使えれば凄く便利なんですが…。
結構悩んだんですが、解決しました。
結論からいきます。

var sq1:Sprite;
function layout(){
sq1 = new square();
addChild(sq1);
sq1.addEventListener(Event.ENTER_FRAME,moveX);
}
function moveX(event:Event){
event.target.x += 1;
if(event.target.x > 100){
removeChild(event.target);
event.target.removeEventListener(Event.ENTER_FRAME,moveX)
}
}
layout();

thisの代わりにevent.targetを使えばオッケー。

Track Back

Track Back URL
http://www.techno-tokyo.com/mt/mt-tb.cgi/34

Post Comment

いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。