0

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

例如,我基本上创建了瓷砖并有鼠标事件:

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 ?

4

3 回答 3

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,以基本了解事件的工作方式,并可能了解范围的工作方式。

于 2013-05-06T17:24:51.530 回答
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 不是一个好主意,因为它真的不是这样。

于 2013-05-06T17:25:37.367 回答
0

一些解释:

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

每个事件对象都有两个特定的属性。

event.currentTarget

是绑定事件侦听器的对象(在您的情况下为“单元格”)

event.target

是“引起”事件的对象。例如,如果在您的“单元格”-MovieClip 中是另一个名为“nucleus”的 MovieClip,并且您单击它,则 event.currentTarget 将是“单元格”,但 even.target 将是“nucleus”。

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

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; 
     }
 }

我希望我解释清楚。

于 2013-05-06T17:26:49.153 回答