Показать сообщение отдельно
Старый 18.09.2011, 02:12
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 1  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
По умолчанию Отображение настроек в диалоговом окне

Извиняюсь, что зачастил с вопросами тут на форуме, но столкнулся с ситуацией, которая поставила меня в тупик, и больше обратиться некуда. Для изучения экшнскрипта 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 секунды
извиняюсь за криво расставленные скобки :-(