Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Узнать, что за объект находится в точке (http://www.flasher.ru/forum/showthread.php?t=185073)

vasya87 04.10.2012 13:10

Узнать, что за объект находится в точке
 
Добрый день! Скажите, можно ли узнать по клику на stage, что за объект находится в точке, где произведён клик (если их несколько, то самый верхний)
Код AS3:

stage.addEventListener(MouseEvent.CLICK, onClick);
//...
function onClick(event:MouseEvent):void
{
    //trace(event.stageX, event.stageY);
}


alatar 04.10.2012 13:13

DisplayObjectContainer#getObjectsUnderPoint()

vasya87 04.10.2012 14:02

alatar, я не могу stage в DisplayObjectContainer конвертировать, он же от DisplayObject'а наследуется.

Добавлено через 6 минут
Придумал такой способ:
Код AS3:

private function hitTestNativeStage(position:Point):DisplayObject
{
        var count:uint = stage.numChildren;
        for (var i:int = count - 1; i >= 0; i--)
        {
                if (stage.getChildAt(i).hitTestPoint(position.x, position.y, true))
                {
                        return stage.getChildAt(i);
                }                               
        }
        return null;
}

Но не уверен, что это не долбанёт по производительности, когда объектов будет много.

PainKiller 04.10.2012 14:11

vasya87 с чего вы это взяли? читайте про Stage в справке И даже если бы так оно и было, как вы говорите, можно было бы сделать корневой контейнер потомок DisplayObjectContainer и использовать getObjectsUnderPoint()

Vreden 04.10.2012 14:33

Все намного проще
Код AS3:

stage.addEventListener(MouseEvent.CLICK, __click);
private function __click(e:MouseEvent):void
{
        e.target //непосредственно тот объект, на котором клацнули
        e.currentTarget //подписанный объект, в нашем случае stage
}


vasya87 04.10.2012 18:39

PainKiller, что-то я жестоко протупил при чтении доков.
Vreden, так тоже хорошо, но с getObjectsUnderPoint() можно делать проверки и не по событиям мыши, более универсально так сказать)

Всё получилось. Всем спасибо!


Часовой пояс GMT +4, время: 11:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.