Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   SimpleButton как сбрасывать состояние Over (http://www.flasher.ru/forum/showthread.php?t=171984)

Roman_Konyukhov 29.11.2011 11:30

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

Как программно сбрасывать состояние в зависимости от того находится ли указатель мыши над кнопкой или нет?

BuKT 29.11.2011 12:07

Может стоит создавать новый инстанс?
Состояние over "сбрасывается", когда кнопка получает событие MouseEvent.MOUSE_OUT. Если до прохождения этого события убрать кнопку, увести мышку, и снова сделать кнопку видимой - не вижу ничего странного, что кнопка, не обработав никаких событий смиренно ждёт новых приказов оставаясь в последнем указанном ей состоянии.

Roman_Konyukhov 29.11.2011 12:24

Что значит создать новый инстанс? (не понял термин) Есть ли какие-нибудь готовые или универсальные решения, для того, чтоб программно сбросить состояние кнопки? Кто как делает?

toFL 29.11.2011 12:53

Как вариант, делать кнопке mouseEnabled = false, а за тем, через фрейм или 1 мс удалять со сцены. За это время, в следующем тике, эта кнопка получит событие о том, что мышка ушла с объекта и её состояние будет дефолтным. После этого, можно добавлять и все будет гуд. Не забудь вернуть mouseEnabled = true.

noobuser 29.11.2011 14:23

для программного "сброса" можно попробовать SimpleButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OUT); Это как бы съэмитирует убирание курсора с кнопки.

dsdbonus 29.11.2011 15:14

Roman_Konyukhov создать новый инстанс, это значит создать новый экземпляр класса, т.е. его объект. В данном случае класс SimpleButton. Если на старую кнопку не где не храниться ссылка, то сборщик мусора удалит её из памяти и все будет хорошо.

Inet_PC 29.11.2011 15:49

Если класс не имеет необходимого функционала, нужно не костыли плодить, а расширить компонент и добавить нужный функционал в него. А если это невозможно или опять же костыльно, то написать свой компонент, и опыт, и в будущем пригодится. Написать свою кнопку ничего сложно. Можно посмотреть как это реализовано в других библиотеках.

noobuser 29.11.2011 16:06

даже не знаю что вы делаете с кнопкой что она так себя ведет. В простейшем примере когда при наведении кнопка удаляется/скрывается и потом обратно добавляется/становится_видимой состояние у неё вполне нормальное (по крайней мере у меня так)

silin 29.11.2011 17:07

упражнения с бубном дали таки способ
кнопка удаляется\добавляется по любой клавише
Код AS3:

public class Main extends Sprite
{
        private var but:Symbol1;
 
        public function Main():void
        {
                but = new Symbol1();
                addChild(but);
                stage.addEventListener(KeyboardEvent.KEY_DOWN, stage_keyDown);
                // без этого имеем сабжевый эффект
                but.addEventListener(Event.ADDED, but_added);
        }
 
        private function but_added(e:Event):void
        {
                if (e.target == e.currentTarget)
                {
                        // 'передергивание' фокуса решает вопрос
                        var focus:InteractiveObject = stage.focus;
                        stage.focus = but;
                        stage.focus = focus;
                }
        }
 
        private function stage_keyDown(e:KeyboardEvent):void
        {
                but.parent ? removeChild(but) : addChild(but);
        }
}


Roman_Konyukhov 29.11.2011 17:39

Спасибо за помощь.


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

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