我的鼠标事件函数中有一个对象,我想在我的时间函数中引用它。
示例,我基本上创建了磁贴并具有鼠标事件:
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?
答案 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;
}
}
我希望我能清楚地解释清楚。