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

Vishapakahr 20.03.2012 23:28

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

Есть скажем у меня displayobject A и displayobject B . A покрывает Б полностью. При наведении на A прозрачность падает а для B даю glow. И так проблема с B ибо покроен A ом. Как мне реализовать оба ? ну понятно что для A могу довать

Код AS3:

A.mouseChildren = false;
A.mouseEnabled = false;

Но для A мне нужны и mouseover и mouseout.

Добавлено через 4 минуты
К стате добавлю что крайная идея у меня было , для B использовать hittestpoint но .. надеюсь на что то еффективнее :)

Wolsh 21.03.2012 02:27

Если объектов много, то хиттест перебором всех это конечно неприятно.
Но альтернатива – getObjectsUnderPoint() тоже не блеск, так как возвращает самые глубоковложенные элементы объектов, и до самих объектов опять надо подниматься (но этот путь конечно обычно гораздо короче чем перебор сотни невиновных объектов хиттестом).

Vishapakahr 21.03.2012 03:05

Значет по лехче не получится :confused: постаянно нужно проверять тагда , лучше сделаю отдельные классы там реализую . Спасибо за ответ .

Wolsh 21.03.2012 04:09

Отдельные классы? Хм. Поделитесь потом с сообществом, если не трудно.

psyanim.as 22.03.2012 00:23

Код AS3:

import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class test extends Sprite
        {
                private var objectA:Sprite;
                private var objectB:Sprite;
 
                public function test()
                {
                        objectA = new Sprite();
                        objectB = new Sprite();
 
                        objectA.addEventListener(MouseEvent.MOUSE_OVER, mouseHandler);
                }
 
                private function mouseHandler(e:MouseEvent):void
                {
                        objectB.dispatchEvent(MouseEvent.MOUSE_OVER);
                }
 
        }

Теперь если подпишешься на MOUSE_OVER event объекта objectB он будет срабатывать вместе с objectA
при желании можно сделать
Код AS3:

objectB.mouseEnabled = false

Тогда он будет срабатывать только если наводишь мышку на objectA

Vishapakahr 22.03.2012 00:50

Цитата:

Сообщение от Wolsh (Сообщение 1070214)
Отдельные классы? Хм. Поделитесь потом с сообществом, если не трудно.

Да , обезательно поделюсь :) дело в том что у меня есть стена , и игроки которие могут быть под стеной , для стени чуть убывается прозрачность при наведении на мышь а остальное должно нормально среагировать на мышь, эти самые у меня специальние классы и для них собираюсь под ентерфрейм все время проверять , и наверно hitTestPoint все же буду применить.

psyanim.as ваш ответ не коректен ... то что вы предлогаете это как бы тождествляет А и Б , даже при Б.visible = false у него будут реагирования из за А.

psyanim.as 22.03.2012 03:34

Я неправильно понял вопрос.
В таком случае можно сделать так:
Код AS3:

package  
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.geom.Point;
        import flash.geom.Rectangle;
 
        public class DisapearringWall extends Sprite
        {
                private var mousePoint:Point;
                private var rectBounds:Rectangle;
 
                public function DisapearringWall()
                {
                        addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        mouseEnabled = false;
                        rectBounds = this.getBounds(stage);
                        stage.addEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
                }
 
                private function moveHandler(e:MouseEvent):void
                {
                        mousePoint.x = e.stageX;
                        mousePoint.y = e.stageY;
                        if (rectBounds.containsPoint(mousePoint))
                        {
                                alpha = 0.8;
                        }
                        else
                        {
                                alpha = 1.0;
                        }
                }
 
        }
 
}

вместо stage можно использовать любой объект относительно которого координаты будут статичны. Или обновлять rectBounds.


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

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