ActionScript - 鼠标坐标不准确?

5
当跟踪显示对象的mouseX / mouseYlocalX / localY坐标时,为什么x从1开始而y从0开始?
例如,我在舞台上绘制了一个简单的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;
}

1
好问题。另外,trace(darkBlueRect.localToGlobal(new Point(evt.localX,evt.localY))); 将会给出 (x=24, y=42) - shanethehat
我没有得到完全相同的结果。精灵末尾的坐标出现了应该有的情况(全局为423/442,本地为400/400)。还要注意的是,mySprite.localX和mySprite.mouseX是相同的。无论如何,我发现唯一的错误在原点,X从1开始,不能点击0。 - user562566
1个回答

3

报告一个你找到的bug:

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

我认为这可能是为了在精灵中应用一条线而腾出空间,但所有这些测试都证明不是这样的。在我看来,这是一个bug。提交它,我会支持它,或者如果你懒得提交,让我知道我会提交,因为应该修复它。

更新

我刚刚进行了另一个测试,将stageScaleMode设置为允许缩放,然后将其缩放2-3倍到对象并尝试在MOUSE_DOWN上获取0/0读数。显然无法完成。最终我确实在X上得到了0读数,但是Y值超出了范围。我认为这个问题可能归结于Flash将X/Y指针位置返回为Number而不是int,并且如果您缩放,则可以在指针位置上获得小数值。也许这只是有错误的代码,或者基于如何计算小数点或者如果您没有缩放和对象没有缩放,Flash会将该小数值四舍五入为int,这也可能解释奇怪的行为。我不知道,只是猜测,想把这个额外测试的结果添加进来。


谢谢你的链接,我会提交错误报告并发送给你链接。该死,我真的希望这不是一个bug,而是我做错了什么,因为这似乎是我昨天以来一直面临的问题的根源:http://stackoverflow.com/questions/6855190/setting-x-coordinate-from-mouse-location - Chunky Chunk
我认为这不是一个错误,更像是鼠标灵敏度的问题。尝试使用result.graphics.drawRect(0, 0, 1, 1);并放大一堆,然后将鼠标悬停在其上,您将看到x和y坐标到小数点后2位。现在我说它是鼠标灵敏度的原因是,对于那些拥有宽屏格式(16x8)(16x9)的人来说,鼠标位置在左右移动时与上下移动时会移动不同的距离。 - The_asMan
你看完了我的整个回答吗?我已经缩小了视图并发布了更新的猜测,关于问题的原因。但无论如何,这仍然是一个错误,或者最好也只是一个改进请求。 - user562566

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接