Flash 闪光中的奇怪偏移
我的项目中有一些非常奇怪的事情(FlashCS5.5和AIR3…) 我需要检查(出于我自己的理由)光标是否位于特定对象的边界内。我用一个简单的代码来做这个Flash 闪光中的奇怪偏移,flash,actionscript-3,actionscript,air,flash-cs5,Flash,Actionscript 3,Actionscript,Air,Flash Cs5,我的项目中有一些非常奇怪的事情(FlashCS5.5和AIR3…) 我需要检查(出于我自己的理由)光标是否位于特定对象的边界内。我用一个简单的代码来做这个 if(mouseX > hsSlot1.x && mouseX < (hsSlot1.x + hsSlot1.width) && mouseY > hsSlot1.y && mouseY < (hsSlot1.y + hsSlot1.height)) {
if(mouseX > hsSlot1.x && mouseX < (hsSlot1.x + hsSlot1.width) && mouseY > hsSlot1.y && mouseY < (hsSlot1.y + hsSlot1.height))
{
//My code
}
if(mouseX>hsSlot1.x和&mouseX<(hsSlot1.x+hsSlot1.width)和&mouseY>hsSlot1.y和&mouseY<(hsSlot1.y+hsSlot1.height))
{
//我的代码
}
从理论上讲,这应该是完美的!但是,在hsSlot1的可视位置(屏幕上显示的起始位置)和hsSlot1.x之间有一个大约16的偏移量(请注意,我没有设置)。y轴上有一个类似的偏移,但我还没有测量它
对于这一点,我唯一能想到的是hsSlot1是一个按钮的实例(该按钮只有一个状态),该按钮被缩放以适合。然而,我不认为是这样,因为数字显示整个对象只是以其当前大小偏移
到底发生了什么事
编辑:我找到了另一种开始不起作用的方法。不过,如果您能给出一个答案,我们将不胜感激,因为这类事情以后可能也会成为一个问题……首先想到的几件事:
hsSlot1
图形的注册点不完全在左上角hsSlot1
的容器(作为直接子容器)调用此代码,则它可能位于另一个稍微偏离的容器中hsSlot1
本身中):
当鼠标在hsSlot1
上时,从它发送一个事件:
看起来您仍然有一些图形没有从左上角对齐到注册点。我刚刚绘制的这个狡猾的图表可能会帮助您理解我的意思,以及为什么它会以这种方式影响您的代码:
首先想到的两件事:
hsSlot1
图形的注册点不完全在左上角hsSlot1
的容器(作为直接子容器)调用此代码,则它可能位于另一个稍微偏离的容器中hsSlot1
本身中):
当鼠标在hsSlot1
上时,从它发送一个事件:
看起来您仍然有一些图形没有从左上角对齐到注册点。我刚刚绘制的这个狡猾的图表可能会帮助您理解我的意思,以及为什么它会以这种方式影响您的代码:
简单的答案是,这样做很困难,因为对象的
x
和y
和宽度
和高度
属性不一定与其边界对应。正如Marty所指出的,这部分是因为对象的注册点(对象局部坐标空间的原点)不一定必须位于对象的拐角处。此外,根据您在范围方面所做的工作,您使用的方法可能需要考虑对象是否缩放、旋转等
解决方案:
false
。(传递true将对照对象的实际形状检查x,y。)为了避免范围问题,可以在全局坐标空间中指定(x,y),因此测试鼠标位置的一种简单方法是:
myObject.hitTestPoint( stage.mouseX, stage.mouseY, false)
当然,也可以在比较之前将局部坐标转换为全局空间简单的答案是,这样做很困难,因为对象的
x
和y
和宽度
和高度
属性不一定与其边界对应。正如Marty所指出的,这部分是因为对象的注册点(对象局部坐标空间的原点)不一定必须位于对象的拐角处。此外,根据您在范围方面所做的工作,您使用的方法可能需要考虑对象是否缩放、旋转等
解决方案:
false
。(传递true将对照对象的实际形状检查x,y。)为了避免范围问题,可以在全局坐标空间中指定(x,y),因此测试鼠标位置的一种简单方法是:
myObject.hitTestPoint( stage.mouseX, stage.mouseY, false)
当然,也可以在比较之前将局部坐标转换为全局空间符号内部的特定范围不起作用,所以我从舞台范围尝试了同样的事情。“如果(hsSlot1.mouseX>=0&&hsSlot1.mouseX=0&&hsSlot1.mouseY,有时我的MovieClips中的子对象不在(0,0)处,我就有了它。”即使代码看起来很好,也会出现类似类型的问题。请确保使用所有涉及的对象验证Marty的#1。接受,因为这可以最好地解释问题,并建议一种替代解决方案,而不是显而易见的解决方案
myObject.hitTestPoint( stage.mouseX, stage.mouseY, false)