观察到的行为:
所需行为: 1,2相同,但在3,我看到我的翻转。
除了跟踪鼠标并将其位置与所有按钮变暗进行比较之外,还有什么方法可以轻松地做到这一点吗?
谢谢!
答案 0 :(得分:0)
您可以使用当前鼠标位置的x和y坐标将mouseMove事件调度到最顶层的容器。这将模拟用户移动鼠标的效果。
private function moveComplete():void
{
topLevelContainer.dispatchEvent(new MouseEvent(MouseEvent.MOUSEMOUSE, true, false, topLevelContainer.mouseX, topLevelContainer.mouseY);
}
答案 1 :(得分:0)
我设置了私有var _bounds:
_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;
}
答案 2 :(得分:0)
您可以为处理程序设置鼠标的默认参数,因此您不需要 创建和分派新事件以运行相同的代码。
e.g。
myBtn.addEventListener(MouseEvent.MOUSE_OVER, btnOverHandler);
function btnOverHandler(e:MouseEvent = null):void{
trace('do stuff on roll over!');
}
//then you can do this wherever you need
btnOverHandler();
它应该适用于这两种情况(MouseEvent,或者不是)。
对于鼠标而言,getObjectsUnderPoint可以很方便。它不仅仅是你对这个特定例子所需要的东西(并且有点冗长),但是要知道它存在的东西是好的。
e.g。
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;
}
希望这有帮助。
答案 3 :(得分:0)
当UI向下滑动时,您可以更改以下属性
slidingUI.mousenabled = false
slidingUI.mousechildren = false
这将在组件滑动时启用下方按钮上的翻转事件。确保之后将属性重置为true。 不确定这是否是你想要的,但它可以派上用场。