【发布时间】:2011-02-28 23:34:08
【问题描述】:
我有想要在单击并按住它们时移动并在释放它们时停止的精灵。我有将事件侦听器添加到 Sprite 的方法:
public function layOutEventListeners():void
{
var addSpriteEventListener:Function =
function(spr:Dictionary, index:int, vector:Vector.<Dictionary>)
{
spr["sprite"].addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
spr["sprite"].addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}
gridVec.forEach(addSpriteEventListener);
}`
以及处理事件的方法:
public function mouseDownHandler(me:MouseEvent):void
{
trace(me.target.toString());
trace(me.currentTarget.toString());
this.drawSprite(me.target);
this.growByTwo(me.target);
me.stopImmediatePropagation();
me.currentTarget.startDrag(me);
}
public function mouseUpHandler(me:MouseEvent):void
{
trace(me.target.toString());
trace(me.currentTarget.toString());
me.stopImmediatePropagation();
this.originalSize(me.target);
me.currentTarget.stopDrag();
}`
我的问题是:当我点击精灵时,只要我移动光标,精灵的注册点就会捕捉到光标,当我松开鼠标时,精灵不会停止跟随光标。我最初认为这是像素碰撞的问题。我以为光标在MOUSE_UP 上没有碰到任何东西,但在我实验后证明是错误的。我什至通过启动另一个项目复制了完全相同的事件添加和处理方法,发现我没有遇到这个问题。测试 Sprite 只是像往常一样简单地拖放,没有捕捉到注册点,而是被我点击的点拖动。
我能看到的唯一区别,也是我唯一的怀疑是,我的原始代码中的 Sprite 被添加到 Sprite,然后被添加到舞台中,而测试项目中的 Sprite 正在被添加到根DisplayObject。我在想,事件以某种方式传播到容器 Sprite 并拖放它而不丢弃另一个 Sprite。我看到的奇怪捕捉可能是光标捕捉到另一个精灵后面的对象。另一件重要的事情:当我将一个 Sprite 放在另一个 Sprite 上时,该 Sprite 会停止移动,但仍会跟踪注册点。
不管怎样,我真的很难过,我真的不知道我跑过来了。有什么想法吗?
【问题讨论】:
标签: apache-flex actionscript-3 mouseevent addeventlistener