我有一个.swf文件,其中包含我从网址加载的圈子,制作成movieClip并将其添加到舞台。
我希望能够检测到用户何时将光标放在圆圈上。我希望它在某种意义上是准确的,它不仅仅使用圆的边界框,而是实际的圆圈本身来检测碰撞。这是我当前代码的一个片段:
//
var myCircle:MyCircle = new MyCircle(swf);
myCircle.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
myContainer.addChild(myCircle);
//
private function onMouseMove(event:MouseEvent):void
{
var glowFilter:GlowFilter = new GlowFilter();
glowFilter.color = 0xffffff;
if (event.currentTarget is MyCircle) {
var object:MyCircle = event.currentTarget as MyCircle;
if(object.hitTestPoint(event.stageX, event.stageY, true))
event.currentTarget.filters = [glowFilter];
else
event.currentTarget.filters = [];
}
}
我被认为shapeFlag
方法的hitTestPoint()
参数会执行此操作,但将其设置为true或false不会产生任何影响。任何想法为什么会这样?
答案 0 :(得分:0)
我之前撰写了一篇关于此篇文章的非常简短的文章,所以我以后会这样做...
看起来你正在看stageX,AFAIK是对象的全局x坐标。
http://messer1024.blogspot.se/2012/06/proper-hittest-in-as3.html
短文的简短版本:
在AS3中处理命中测试的许多丑陋尝试后,我终于设法解决了我想要的问题。我忘记考虑的是使用全局鼠标坐标。
public function hitTestMouse(hitarea:DisplayObject):Boolean {
return hitarea.hitTestPoint(hitarea.stage.mouseX, hitarea.stage.mouseY, true);
}
最后一个参数(shapeFlag)将决定是否在命中测试中检查鼠标悬停在上方的任何实际形状。
所以为了让你的东西工作,你可能应该让它更容易并添加我的功能,然后当你想测试它时运行“hitTestMouse(myCircle)”