Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 激活鼠标下方的按钮:如何捕获结束事件?_Flash_Actionscript 3 - Fatal编程技术网

Flash 激活鼠标下方的按钮:如何捕获结束事件?

Flash 激活鼠标下方的按钮:如何捕获结束事件?,flash,actionscript-3,Flash,Actionscript 3,观察到的行为: 我有一个滑动到屏幕上的UI页面。 幻灯片完成后,激活按钮。 如果鼠标已经在按钮上,则不会发生鼠标翻转,因为从技术上讲,鼠标尚未翻转 期望的行为:1,2相同,但在3,我看到我的滚动 除了一些蛮力,比如跟踪鼠标并将其位置与所有按钮进行比较,还有什么方法可以轻松做到这一点 谢谢 您可以使用当前鼠标位置的x和y坐标将mouseMove事件发送到最顶端的容器。这将模拟用户移动鼠标的效果 private function moveComplete():void { topLevelC

观察到的行为:

我有一个滑动到屏幕上的UI页面。 幻灯片完成后,激活按钮。 如果鼠标已经在按钮上,则不会发生鼠标翻转,因为从技术上讲,鼠标尚未翻转 期望的行为:1,2相同,但在3,我看到我的滚动

除了一些蛮力,比如跟踪鼠标并将其位置与所有按钮进行比较,还有什么方法可以轻松做到这一点


谢谢

您可以使用当前鼠标位置的x和y坐标将mouseMove事件发送到最顶端的容器。这将模拟用户移动鼠标的效果

private function moveComplete():void
{
    topLevelContainer.dispatchEvent(new MouseEvent(MouseEvent.MOUSEMOUSE, true, false, topLevelContainer.mouseX, topLevelContainer.mouseY);
}

在按钮init上,我设置私有变量_界限:

_bounds = getBounds(this);
激活时,我呼叫:

if (isMouseOver()) doOver(true);
然后是函数:

private function isMouseOver():Boolean {
    //trace ("isMouseOver:");
    var xBool:Boolean = _bounds.left < mouseX && mouseX < _bounds.right;    
    var yBool:Boolean = _bounds.top < mouseY && mouseY < _bounds.bottom;
    //trace (" - xBool: " + xBool);
    //trace (" - yBool: " + yBool);
    return xBool && yBool;
}

您可以为鼠标悬停处理程序设置默认参数,这样您就不需要 创建并分派新事件以运行相同的代码

e、 g

它应该在MouseeEvent和MouseeEvent两种情况下都能工作

而对于鼠标在上面的东西,可以很方便。对于这个特定的例子,它比你需要的要多,而且有点长,但是意识到它的存在是件好事

e、 g


希望这有帮助。

当用户界面向下滑动时,您可以更改以下属性

slidingUI.mousenabled = false
slidingUI.mousechildren = false
这将在组件滑动时在下面的按钮上启用翻转事件。之后,请确保将属性重置为true。
不确定这是否是您想要的,但它可能会派上用场。

不过,我不知道这对我有什么帮助。如果这是一个鼠标移动,但他们从未离开过交互对象,那会给我带来什么?我仍然需要将x+y与所有按钮的约束进行比较,对吗?为什么?topLevelContainer接收到一个MOUSE_MOVE事件,然后它会将该事件向下传播到它的子级,这些子级是您移动的UI按钮。这将在相应的按钮上触发鼠标悬停事件,并产生滚动效果。嗯。。。对不起,cookie,我试过了,但是没有骰子。不确定我是否正确实施了它。考虑到鼠标已经在所需的按钮上,我仍然不知道这将如何触发鼠标悬停。或者你的意思是在滑动按钮上添加一个额外的侦听器来侦听顶级鼠标移动?我想一个解决方法是先侦听鼠标移动,然后触发鼠标移动,让我想想一个比这个更优雅的解决方案。这件事会引起孩子们的注意。它会冒泡,而不是冒泡。
function isMouseOver(target:DisplayObject,container:DisplayObjectContainer):Boolean{
   var isOver:Boolean = false;
   var pt:Point = new Point(mouseX, mouseY);
   var objects:Array = container.getObjectsUnderPoint(pt);
   for(var i:int = 0 ; i < objects.length; i++){
      if(objects[i] == target) {
         isOver = true;
         break;
      }
   }
   return isOver;
}
slidingUI.mousenabled = false
slidingUI.mousechildren = false