ActionScript - неточные координаты мыши? - PullRequest
5 голосов
/ 29 июля 2011

при трассировке координат 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;
}

1 Ответ

3 голосов
/ 29 июля 2011

Сообщите об ошибке, вы нашли одну:

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

Я подумал, что, возможно, нужно было освободить место для строки, примененной к спрайту, среди прочего, но во всех этих тестахоказалось не так.Это, на мой взгляд, ошибка.Подайте его, и я его напишу, или, если вас это не беспокоит, дайте мне знать, я подам его, потому что это должно быть исправлено.

Обновление

Я только что попробовал другой тест, в котором я установил stageScaleMode, чтобы разрешить масштабирование, затем увеличил масштаб 2-3 раза до объекта и попытался получить 0/0 показания на MOUSE_DOWN.Просто не может быть сделано, по-видимому.Я наконец-то получил 0 на X, но затем Y вышел.Я думаю, что эта проблема может сводиться к тому, что flash возвращает позицию указателя X / Y в виде числа, а не целого числа, и вы можете получить десятичные значения в позиции указателя, как вы заметите, если вы увеличите масштаб. Возможно, этопросто глючный код, или это сводится к проблемам точности с плавающей запятой, основанным на том, как вычисляются десятичные точки, или, если вы не увеличиваете масштаб, и объект не масштабируется, мигает округление этого десятичного значения от int, и это также может объяснитьстранное поведение.Не знаю, просто угадала, решила добавить результаты этого дополнительного теста.

...