Показать сообщение отдельно
Старый 11.11.2011, 07:30
Denis_ex вне форума Посмотреть профиль Отправить личное сообщение для Denis_ex Найти все сообщения от Denis_ex
  № 1  
Ответить с цитированием
Denis_ex

Регистрация: Aug 2009
Сообщений: 134
По умолчанию Реализация интерфейса закладок в редакторе уровней

Реализую интерфейс в редакторе уровней, есть поле с закладками.
Сделал так, есть базовый класс закладок и каждая новая закладка – это один класс унаследованный от базового и принимающий спрайт (с помощью композиции) для отображения содержимого вкладки.
Все вроде ок, заполняем каждую вкладку спрайтом с контентом, там расшариваем вложенные клипы, поля, счетчики и работаем с ними.
Но получилось так, что есть ряд игровых объектов, которые надо расположить на уровне перетаскиванием и они разделены по разделам, напр. “динамические”, “статичные”, “люди”, “бэкграунды” и пр. и каждый такой раздел с объектами отображается в отдельной вкладке, но инструментом для отображения я использую единственный экземпляр компонента TileList с ячейками, просто при переходе в каждый раздел я очищаю и заполняю ячейки новыми объектами из соотв. раздела.
Но есть проблема, чтобы один единственный экземпляр объекта TileList, находился во всех закладках, я его добавил в базовый класс, как статичный.

Код AS3:
public class BaseTab
{
        // ссылка на единственный экземпляр во всех наследуемых классах
        static var tileList: TileList; 
	public static var curPart:int;
	public var visual:DisplayObjectContainer;
 
	public function BaseTab( part:int, icon:DisplayObjectContainer, container:DisplayObjectContainer,  regObj:RegisterObjects, visual:DisplayObjectContainer = null  )              
	{
		//…
	}
 
		//…
	}
При создании очередной закладки, мне приходится проверять, был ли создан единственный TileList и был ли добавлен в список отображения, если нет, то создать/добавить напр.:

Код AS3:
public class TileItemTab extends BaseTab
{
    public function TileListTab( part:int, icon:DisplayObjectContainer, container:DisplayObjectContainer,
	                                     regObj:RegisterObjects)
    {
	    super( part, icon, container, regObj, null );
 
            //проверка экземпляра TileList на создание и добавление 
            //в список отображения в наследуемом классе закладки
	    if (!tileList)
	    {
		tileList  = new tileList ();
		//tileList.update(EnumPart.DYNAMIC);
		container.addChild(tileList);
		tileList.x = Utils.center(container.width, tileList.width);
		tileList.y = 90;
	    }
 
	    //….
    }
}
Вся эта ситуация со статическим экземпялром TileList и проверками в каждом наследуемом классе на создание/добавление в список отображения мне не нравится, организовано плохо, посоветуйте варианты, как можно более правильно реализовать, чтобы с одним единственным объектом TileList можно было работать в наследуемых классах закладок.