ActionScript - 不准确的鼠标坐标?

The*_*978 5 mouse actionscript-3 coordinates

当跟踪显示对象mouseX / mouseYlocalX / localY坐标时,为什么从0 x开始时从1 y开始?

例如,我在舞台上绘制了一个简单的400 x 400像素精灵,其中一个MouseEvent.MOUSE_MOVE事件监听器调用处理函数来跟踪鼠标的本地坐标.

第一个左上角像素返回{x:1, y:0},最后一个右下角像素返回{x:400, y:399}.不应该xy开始和结束具有相同的值?我不确定哪个对第一个鼠标坐标(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;
}
Run Code Online (Sandbox Code Playgroud)

小智 3

报告错误,您发现了一个:

http://bugs.adobe.com/flashplayer/

我想也许这是为了给精灵上的一条线腾出空间,但所有这些测试都证明情况并非如此。在我看来,这是一个错误。将其归档,我会附议,或者如果您不介意,请告诉我,我将归档它,因为它应该得到修复。

更新

我刚刚尝试了另一个测试,将 stageScaleMode 设置为允许缩放,然后将对象放大 2-3 倍,并尝试在 MOUSE_DOWN 上获取 0/0 读数。只是显然无法完成。我最终确实在 X 上得到了 0 读数,但随后 Y 就出来了。我认为这个问题可能归结为以下事实:flash 将 X/Y 指针位置返回为数字而不是整数,并且您可以在指针位置上获得小数值,正如您放大时会注意到的那样。也许是只是有错误的代码,或者归结为基于小数点计算方式的浮点精度问题,或者如果您没有放大并且对象没有缩放,则闪存会将该小数值舍入为整数,这也可以解释奇怪的行为。不知道只是猜测,我想我会添加这个额外测试的结果。