Форум 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=209200)

delphic 20.10.2014 15:51

узнать имя мувика под курсором
 
Здравствуйте, как можно узнать имя мувика который находится под курсором?
1)Например есть на сцене мувики, у некоторых есть имена, например как можно организовать что бы при наведении курсора на мувик я мог получить его имя
2)если в мувике вложен еще один мувик, можно его имя получить при наведении курсора мыши?
3)если мувик с именем x в него вложен мувик с именем y , как тогда вытащить имена?

samana 20.10.2014 16:09

Подпишите stage на MOUSE_OVER и узнавайте кто вызвал событие с помощью e.target

delphic 20.10.2014 16:20

Цитата:

Сообщение от samana (Сообщение 1173793)
Подпишите stage на MOUSE_OVER и узнавайте кто вызвал событие с помощью e.target

что то вроде
Код AS3:

trace(e.target)

?
я с e.target особо не сталкивался

Gerbert 20.10.2014 16:21

samana, а зачем stage подписывать на mouse_over?
Вроде на mouse_move нужно?

Добавлено через 4 минуты
Вы меня простите, у меня сейчас нет возможности проверить, но с mouse_over могло бы получится,
если бы объекты лежали в spriteContainer. У Sprite есть, вроде, момент, что он показывает только
на лежащие в нем объекты, а на пустоте события не ловит. Но со stage же другая вроде история,
так как именно на ней подписывают, когда sprite пустоту игнорирует. Или я не прав?

samana 20.10.2014 16:52

Gerbert, вы правы, stage не обязательно подписывать, можно ограничится и документ классом, а stage это так, для глобального масштаба.
А mouse_move будет лишним, ведь нужно узнать имя объекта под мышью именно тогда, когда на него "зашла" мышь, а не постоянно когда мышь даже в его пределах. Хотя зависит от того, что хочешь получить ТС.

Цитата:

У Sprite есть, вроде, момент, что он показывает только
на лежащие в нем объекты, а на пустоте события не ловит.
Если честно не понял вашу мысль.

delphic, попробуйте такой код
Код AS3:

import flash.events.MouseEvent;
 
addEventListener(MouseEvent.MOUSE_OVER,mouse_over);
function mouse_over(e:MouseEvent):void
{
        trace(e.target.name)
}


Gerbert 20.10.2014 17:01

Цитата:

Если честно не понял вашу мысль.
Создал спрайт-контейнер ( не залитый ) и поместил в него два прямоугольника ( залитых ) и подписал его на событие мыши. На сколько я помню, при mouse_move вне залитых областей событие ловится не будет.
То есть, на залитых прямоугольниках будет, а вне нет.
Код AS3:

var container = new Sprite( );
container.addEventListener( MouseEvent.MOUSE_MOVE, container_mouseMoveHandler );
super.addChild( container );
 
var rect1 = new Sprite( );
rect1.graphics.biginFill( 0x000000 );
rect1.graphics.drawRect( 0, 0, 50, 50 );
rect1.graphics.endFill( );
container.addChild( rect1 );
 
var rect2 = new Sprite( );
rect2.graphics.biginFill( 0x000000 );
rect2.graphics.drawRect( 0, 0, 50, 50 );
rect2.graphics.endFill( );
 
rect2.x = 150;
 
container.addChild( rect2 );


samana 20.10.2014 17:10

Gerbert, ага понял вашу мысль. Конечно, никакое событие мыши не возникнет, если курсор над пустотой (не залитой зоной). И с чего бы этому событию возникать, ведь идёт проверка не по boundsRect спрайта.

Gerbert 20.10.2014 17:27

samana, да не возникнет и именно для этого мы подписываем stage на mouse_move?
Что в свою очередь гарантирует работу события везде.
И я это к чему... Вы посоветовали подписать stage на mouse_over и у меня возникло предположение, которое я не могу сейчас проверить, что из-за того, что target stage, событие over станет срабатывать везде. То есть, у меня на сцене те же два прямоугольника, но событие over срабатывает везде.. Нет?

samana 20.10.2014 18:02

Gerbert, что-то я запутался, не могу понять, что вас смущает)
Если вы подпишите stage на mouseOver, то вы всё равно никогда не сможете увидеть результат e.target==stage, так как на stage нельзя ничего нарисовать (graphics (если я не ошибаюсь)) и это событие будут вызывать любые другие объекты, но не stage.
Даже если вы подпишите только документКласс на mouseOver, то это событие словит тоже любой объект, любой вложенности, так как он является потомком документКласса. Поэтому, чтобы узнать имя объекта при наведении на него мыши, не обязательно подписывать stage, достаточно и документКласса.

Gerbert 20.10.2014 21:30

samana, и не надо,я проверил и оказалось, что.. Не надо:)


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

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