引用不同函数中的对象as3

时间:2013-05-06 17:13:18

标签: actionscript-3 function flash-cs5

我的鼠标事件函数中有一个对象,我想在我的时间函数中引用它。

示例,我基本上创建了磁贴并具有鼠标事件:

var cell:MovieClip = new Tile();
cell.gotoAndStop(floor1[i][u]);
cell.x = ((u-i)*tileh)+365;
cell.y = ((u+i)*tileh/2)+70;
addChild(cell);

cell.addEventListener(MouseEvent.ROLL_OVER, mouseover);
cell.addEventListener(MouseEvent.ROLL_OUT, mouseout);
cell.addEventListener(MouseEvent.CLICK, mouseclick);
enemyMoveTimer.addEventListener(TimerEvent.TIMER, timerListener);

在鼠标事件中,我有一个名为event.currentTarget的东西。由于我有相互排列的瓷砖,我想区分每个瓷砖。从而创建了event.currentTarget。我想在我的时间事件中使用它,但它不是将event.currentTarget识别为一个对象,而是它自己的计时器。有没有办法让时间函数识别来自鼠标事件的event.currentTarget?

3 个答案:

答案 0 :(得分:1)

Event.currentTarget是分派该特定事件的最后一个对象(Event.target是分派事件的原始对象)。它绝对可以扩展EventDispatcher

做你想做的事的唯一方法就是这样:

var currentTile:Tile;

cell.addEventListener(MouseEvent.ROLL_OVER, mouseEventsHandler);
cell.addEventListener(MouseEvent.ROLL_OUT, mouseEventsHandler);
cell.addEventListener(MouseEvent.CLICK, mouseEventsHandler);
enemyMoveTimer.addEventListener(TimerEvent.TIMER, timerListener);

function mouseEventsHandler( e:MouseEvent ):void {
    this.currentTile = e.currentTarget as Tile;
}

function timeListener( e:TimerEvent ):void {
    this.currentTile.blah.blah();
}

基本上,您将最近与之互动的磁贴保存到currentTile,然后您在timeListener中访问该磁贴。

您应该仔细查看LiveDocs,以便对事件的工作方式有一个基本的了解,并可能了解范围的工作原理。

答案 1 :(得分:0)

这是你可以做到的一种方式:

enemyMoveTimer.addEventListener(TimerEvent.TIMER, timerListener(cell));
enemyMoveTimer.start();

public function timerListener(cell:MovieClip):Function
{
    var doStuffToCell:Function = new Function(e:TimerEvent)
    {           
         trace (cell.x + " : " + cell.y);
         // do whatever you want with cell 
    }
    return doStuffToCell;
}

我应该注意,我认为调用处理程序timerListener并不是一个好主意,因为它是一个处理程序。

听众就是这么做的,他们会听一个事件。处理程序,处理事件。 addEventListener方法中的第二个参数指定了处理事件的函数。在我看来,命名你的处理程序timerListener不是一个好主意,因为它真的不是那样。

答案 2 :(得分:0)

一些解释:

您的事件监听器收到一个事件对象。总是。什么样的事件对象取决于事件。在MouseListener中,您将收到一个MouseEvent,TimerListener中有一个TimerEvent,依此类推。

每个Event-Object都有两个特定的属性。

event.currentTarget

是Object,它绑定事件监听器(在你的情况下" cell")

event.target

是对象,"引起"事件。如果是在你" cell" -MovieClip是另一个名为" nucleus"然后点击它,event.currentTarget将是" cell",但是even.target将是" nucleus"。

由于event-object是作为函数参数传递的,因此一旦函数完成,它就会被销毁。如果你想在另一个函数中使用它的一部分,你需要像这样做

var myCell:MovieClip;
function mouseClick(event:MouseEvent):void{
    myCell = event.currentTarget as MovieClip;
}

function timeListener(event:TimerEvent):void{
     if(myCell){
        ///what ever you want to do with it

           myCell = null; 
     }
 }

我希望我能清楚地解释清楚。