在跟踪显示对象的mouseX / mouseY
或localX / localY
坐标时,为什么x
从1开始,而y
从0开始?
例如,我在舞台上绘制了一个简单的400 x 400像素精灵,其中MouseEvent.MOUSE_MOVE
事件监听器调用处理函数来跟踪鼠标的本地坐标。
第一个左上角像素返回{x:1, y:0}
,最后一个右下角像素返回{x:400, y:399}
。 x
和y
不应该以相同的值开头和结尾吗?我不确定哪个对于第一个鼠标坐标(0或1)更有意义,但它们确实没有意义它们是不同的?
[SWF(width = "1000", height = "600", backgroundColor = "0xCCCCCC")]
import flash.display.Sprite;
import flash.events.MouseEvent;
var darkBlueRect:Sprite = createSprite();
darkBlueRect.x = 23;
darkBlueRect.y = 42;
addChild(darkBlueRect);
darkBlueRect.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler);
function mouseMoveEventHandler(evt:MouseEvent):void
{
trace(darkBlueRect.mouseX, evt.localX, darkBlueRect.mouseY, evt.localY);
}
function createSprite():Sprite
{
var result:Sprite = new Sprite();
result.graphics.beginFill(0x0000FF, 0.5);
result.graphics.drawRect(0, 0, 400, 400);
result.graphics.endFill();
return result;
}
答案 0 :(得分:3)
报告错误,您找到了一个:
http://bugs.adobe.com/flashplayer/
我想也许是为了一条线应用于精灵的空间,但所有这些测试都证明并非如此。在我看来,这是一个错误。提交它,我会把它放在第二位,或者如果你不能打扰我告诉我我会提交它,因为它应该被修复。
<强>更新强>
我刚试过另一个测试,我将stageScaleMode设置为允许缩放,然后放大2-3次到对象并尝试在MOUSE_DOWN上获得0/0读数。显然不能做到。我终于在X上得到了0读数但是然后Y出局了。我认为这个问题可能归结为flash将X / Y指针位置作为数字而不是int返回,并且你可以在指针位置获得十进制值,如果你放大了你可能会注意到。也许它是只是错误的代码或它归结为基于如何计算小数点的浮点精度问题,或者如果你没有放大并且对象没有缩放,flash会将这个十进制值从int中移出,这也可以解释奇怪的行为。 Dunno只是猜测,以为我会添加这个额外测试的结果。