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

PainKiller 18.09.2011 02:12

Отображение настроек в диалоговом окне
 
Извиняюсь, что зачастил с вопросами тут на форуме, но столкнулся с ситуацией, которая поставила меня в тупик, и больше обратиться некуда. Для изучения экшнскрипта 3.0 пишу игру во Flash CS5 + FlashDevelop. В игре есть главное меню, в котором при клике на пункте «Опции» создается и выводится на экран экземпляр класса Settingsdialog потомок мувиклипа. В нем расположено несколько компонентов - чекбоксы, радиобаттоны, слайдеры и т.д. Есть статический класс GameSettings, в котором хранятся настройки игры. С Settingsdialog’а с помощью компонентов осуществляется редактирование свойств класса GameSettings. Судя по трассируемым переменным редактирование проходит успешно. Затем я закрываю Settingsdialog и хочу открыть его заново с тем состоянием компонентов, которое отображает сделанные настройки. Для этого в конструкторе этого класса я прописал функции, которые обращаются к GameSettings, и приводят значения компонентов в соответствующее состояние. Опять же судя по результатам трассировки (и свойств GameSettings и состояний компонентов) это проходит успешно, значения присваиваются, но окно открывается с настройками выставленными по умолчанию!!! Вот пример кода из класса Settingsdialog (лишнее вырезал, оставил только методы, которые должны выставлять компоненты в нужное состояние). В комментариях значения второй трассировки переменных при втором открытии окна (после того как дефолтные настройки были изменены).
Код:

package dialogs
{

        import fl.events.SliderEvent;
        import flash.display.MovieClip;
        import dialogs.DialogWindow;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import main.GameSettings;
        import fl.controls.*;
        import fl.lang.Locale;


        public class Settingsdialog extends DialogWindow
        {
                private var settings:GameSettings;


                public function Settingsdialog()
                {
                        slider.addEventListener(SliderEvent.CHANGE, sliderChanged);
                        languageCombobox.addEventListener (Event.CHANGE, languageSelected);
                        nosound.addEventListener (Event.CHANGE, onRadioButton); //это три радиобаттона, обрабатываются одной функцией
                        gamesound.addEventListener (Event.CHANGE, onRadioButton);
                        allsounds.addEventListener (Event.CHANGE, onRadioButton);
                        configureRadioAndCheck ();
                        configureSlider ();
                }
                public function configureRadioAndCheck ():void
                {
                        trace (GameSettings._nosound + "nosound"); // по дефолту false, во второй раз, после редактирования показывает true как надо
                        if (GameSettings._nosound)
                        {
                                nosound.selected = true;
                                trace (nosound.selected + " nosound.selected") // тут тру – как надо, но при отрисовке окна выбран не этот радиобаттон, а дефолтовый
                        }
                        if (GameSettings._gamesound)
                        {
                                gamesound.selected = true;
                        }
                        if (GameSettings._allsound)
                        {
                                allsounds.selected = true;
                        }
}
                       
                       
                public function configureSlider ():void
                {
                        slider.value = GameSettings.DIFFICULTY;
                        trace (GameSettings.DIFFICULTY + "difficulty");
                        trace (slider.value + "slider"); // Значение слайдера соответствует значению диффикульти, но отображается опять же дефолтовое значение
                }

Добавлено через 53 секунды
извиняюсь за криво расставленные скобки :-(

GBee 18.09.2011 12:22

RadioButtonGroup не пробовали использовать?

PainKiller 18.09.2011 20:25

а в чем разница? вешать обработчик отдельно на радиобаттоны или на группу в целом?

Добавлено через 46 часов 36 минут
Кстати насчет этого вопроса, разобрался в чем причина. Если на клипе, в настройках компонента, стоит галочка selected, то он будет загружаться выбранным независимо от кода приведенного выше. Это очень неудобно, и не ужели никто, кто работал с Flash CS5 с этим не сталкивался? Видимо, придется создавать компоненты программно, что в моем случае очень неудобно.


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

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