【问题标题】:Flash AS3 MouseOver not workingFlash AS3 MouseOver 不工作
【发布时间】:2016-06-04 18:40:09
【问题描述】:

我无法让 MOUSE_OVER 事件按预期持续触发。我的鼠标上有一个自定义光标(movieclip),它有 2 帧(第一帧光标为黑色,第二帧光标为白色)。

这是我的光标脚本中的代码:

    private function onAddedToStage(event:Event):void
    {
        gotoAndStop(1);
        this.mouseChildren = false;
        this.mouseEnabled = false;
    }
    public function rollover():void
    {
        gotoAndStop(2);
        trace("change cursor");
    }

这是一个对象的类,当光标移到它上面时会做出反应:

public class DoorHS01 extends MovieClip
{
    public var cursor:Cursor;
    public function DoorHS01() 
    {
        cursor = new Cursor();

        this.addEventListener(MouseEvent.MOUSE_OVER, rollover);
    }

    public function rollover(e:MouseEvent):void
    {
        cursor.rollover();
        trace("rollover");
    }
}

}

所以在 DoorHS01 类中,MouseEvent 并不总是触发,否则它会被延迟。 cursor.rollever 函数被调用并在游标类中执行(我从跟踪中知道),但游标永远不会改变。

我错过了什么?

【问题讨论】:

  • 我认为可能是自定义光标引起了问题,所以我尝试将所有影片剪辑添加到一个数组中,如下所示:_hotSpotArr = [mc1, mc2],然后只检查 enterframe 中的冲突,如下所示:for (var i:Number = 0; i < _hotSpotArr.length; i++) { if (cursor.hitTestObject(_hotSpotArr[i])) { cursor.gotoAndStop(2); } else (cursor.hitTestObject(_hotSpotArr[1])) { cursor.gotoAndStop(1); } }但这似乎也不起作用......
  • ^我的意思是它只适用于 mc2 而不是 mc1
  • in DoorHS01 既然你做了一个cursor = new Cursor(); 而不是一个模糊的this.,为什么不跟着一个特定的cursor.addEventListener(MouseEvent.MOUSE_OVER, rollover); 来保证你在和光标说话呢?您不需要光标动画剪辑本身内部的代码(除了第 1 帧上的 stop(); 来停止自动播放)。最后在那个 DoorHS01 而不是 cursor.rollover() 只是做一个 cursor.gotoAndStop(2);.. 有帮助吗?
  • ^我决定我不想为游戏中的每一个可能出现光标的对象都创建一个类,而是将它们添加到数组中并检查与光标的碰撞。但是我刚刚注意到一些非常奇怪的事情......在我的游标类中,我删除了除上面看到的 OnAddedToStage 之外的所有函数。然后我删除了 gotoAndStop(1) 命令,只是为了观察光标“闪烁”(在第 1 帧(黑色光标)和第 2 帧(白色光标)之间来回切换......它停留在第 1 帧。为什么?它没有意义。
  • 没关系,我修好了。该死的,我希望我能在这个线程的顶部发表一个大帖子,而不仅仅是能够添加 cmets。我觉得 cmets 中的代码看起来很糟糕......我可能只需要开始一个新帖子。我在第一条评论中的问题^^^^是我遇到的问题。我不明白为什么光标只会随着数组中的第二个对象而不是第一个对象而改变。跟踪命令显示它识别循环内数组中的第一个对象...

标签: actionscript-3 flash


【解决方案1】:

我决定实现我想要的最佳方法是测试与我的自定义光标的碰撞,而不是为需要翻转功能的所有对象创建类。我目前也不知道有多少对象需要这种翻转功能,因为与我合作的设计师仍在制定游戏细节,因此在需要时将所需的内容添加到数组中会更容易。我最终选择了这个:

            for (var i:int = 0; i < _hotSpotArr.length; i++)
            {
                if (cursor.hitTestObject(_hotSpotArr[i]))
                {
                    cursor.gotoAndStop(2);
                    break;
                }
                else
                {
                    cursor.gotoAndStop(1);
                }
            }

【讨论】:

  • 只需 +1 即可解决您自己的问题。我认为您可以通过在 rollOver 函数中使用event.currentTarget 来达到相同的效果。这将自动检测正在翻转的显示对象,您可以对其执行 if/else。在您的 rollOver 代码中尝试 trace("rollover Obj was : " + e.currentTarget); 看看我的意思,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
相关资源
最近更新 更多