Показать сообщение отдельно
Старый 22.10.2017, 00:32
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 47  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
Цитата:
Сообщение от Godwarlock Посмотреть сообщение
Appleman Для таких вещей можно написать ассет менеджер или использовать готовый. Это объект, который содержит в себе весь графический(и не только) контент, по получению контента, используется get функция, например getImage(name:String):Bitmap или getXml(name:String):XML и т.д. Нет смысла эмбедить все по разным классам, достаточно одного.
Спасибо, понятно. У меня уже есть файл-менеджер для чтения XML. Но он в рантайме читает. Я думал, битмапки на этапе компиляции должны загружаться. А есть примеры ассет-менеджера на посмотреть?

И ещё пачка практических нубских вопросов. Пишу класс для кнопочки меню (по уроку, но не бездумно копируя, а сразу модифицируя под свои задачи). Имеем там:

Код AS3:
		private var _defaultState:Sprite = new Sprite; 	// Состояние по умолчанию
		private var _overState:Sprite = new Sprite; 	// при наведении мыши
		private var _downState:Sprite = new Sprite;	// при нажатии кнопки мыши
		private var _inactiveState:Sprite = new Sprite;	// если кнопка неактивна
 
		private var _currentState:Sprite; 	// Текущее состояние
		private var _container:Sprite;		// Контейнер для состояний
Первое, что я не понимаю из этого урока, это наличие переменной _container. Зачем иметь в классе
Код AS3:
this.addChild(_container);
чтобы потом писать
Код AS3:
_container.addChild(_defaultState);
Почему нельзя все состояния сразу помещать в this, зачем ещё один контейнер нужен?

Второе. По уроку там кнопочки - это битмапки, причём сложной формы. Поэтому дополнительно создана переменная sensor:Sprite, которая накладывается сверху и определяет область чувствительности к наведению и кликам. На неё же вешаются все слушатели событий от мыши. Я решил, что поскольку у меня кнопки - это пока обычные прямоугольники, рисуемые с помощью drawRect, то на фига мне этот сенсор сдался, и не стал его добавлять. Теперь сижу и мучаюсь, куда слушатели вешать. То ли на _currentState, то ли на _container, то ли на this - и ведь все варианты, зараза, работают Проясните, плиз!

Третье. Если кнопка должна уметь быть неактивной, что в этом случае будет правильнее: запрограммировать в том же классе вариант (как это сделано сейчас), унаследоваться или сделать вообще новый класс? В каждом из вариантов что-то смущает. Если всё в одном классе писать, то непонятно, что делать со слушателями событий, т.к. неактивная кнопка, например, не будет менять свой внешний вид при наведении мыши, что ломает единую логику класса. Тогда можно было бы унаследоваться и переопределить методы. Но тогда кто-то должен "знать", экземпляр какого из классов кнопки создавать: обычный или неактивный. Не понимаю, куда запихивать эту логику.