различное поведение MOUSE_OUT для вертикальных и горизонтальных перемещений? - PullRequest
2 голосов
/ 13 января 2010

MOUSE_OUT события, очевидно, обрабатываются по-разному для движений мыши X и Y при выходе из спрайта.

Как это исправить или обойти это? Где это задокументировано?

MOUSE_OUT происходит, когда x==0, но не y==0 (вам нужно перейти к y==-1):

private var _sp:Sprite;

public function test( ):void
{
    stage.align = StageAlign.TOP_LEFT;
    stage.scaleMode = StageScaleMode.NO_SCALE;

    _sp = new Sprite( );
    _sp.graphics.beginFill( 0xFF0000, 1 );
    _sp.graphics.drawRect( 0, 0, 15, 15 );
    _sp.graphics.endFill( );
    _sp.x = 10;
    _sp.y = 10;
    _sp.alpha = 1;

    addChild( _sp );

    _sp.addEventListener( MouseEvent.MOUSE_MOVE, msMvCb, false, 0, true );
    _sp.addEventListener( MouseEvent.MOUSE_OUT, msOutCb, false, 0, true );
}

private function msMvCb( evt:MouseEvent ):void
{
    traceMousePos( "mv", evt );
    _sp.alpha = 1;
}

private function msOutCb( evt:MouseEvent ):void
{
    traceMousePos( "out", evt );
    _sp.alpha = .5;
}

private function traceMousePos( note:String, evt:MouseEvent ):void
{
    trace( note + " -- " + evt.localX + ", " + evt.localY + ", " + evt.stageX + ", " + evt.stageY );
}

Вот след от движения прямо вверх, с MOUSE_OUT на -1 ...

mv -- 7, 3, 17, 13
mv -- 7, 2, 17, 12
mv -- 7, 1, 17, 11
mv -- 7, 0, 17, 10
out -- 7, -1, 17, 9

А вот след от движения прямо налево, с MOUSE_OUT на 0 ...

mv -- 3, 7, 13, 17
mv -- 2, 7, 12, 17
mv -- 1, 7, 11, 17
out -- 0, 7, 10, 17

1024 * редактировать *

Такое же ошибочное поведение происходит с MOUSE_ENTER.

Ответы [ 2 ]

1 голос
/ 22 января 2010

Один из способов «исправить» это поведение - создать подкласс Sprite, который прослушивает все его события MOUSE_MOVE, MOUSE_OUT и MOUSE_ENTER. При рассмотрении каждого события должно быть относительно просто решить: позволить ему распространяться как обычно, полностью его остановить или отправить событие нового типа, соответствующее вашему желаемому поведению.

Например, можно прослушать MOUSE_MOVE, а если y == 0, отправить новое событие MOUSE_OUT (и заблокировать любые последующие избыточные события, если y == - 1).

0 голосов
/ 14 января 2010

Я не эксперт, но мне кажется, что это какая-то ошибка, я тоже попробовал с ROLL_OVER, делает то же самое, также как и в случае с заметным, если вы поставите флажок в 0,0, то на грани будет 1пкс верхняя часть сцены, которая также показывает как -1, когда над ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...