Тема: Паттерны Объектный пул.
Показать сообщение отдельно
Старый 03.10.2015, 15:03
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Тот, кто работает над проектом называет это "объектный пул", при этом вытаскивая не первый попавшийся объект, а ищет объект с нужными координатами, чтобы получить его другие значения.
Этот "тот кто работает над проектом" я. Он мне уже весь мозг взорвал пытаясь доказать, что у меня не пул объектов а просто массив или что-то в этом роде.
Суть такая: есть класс ObstaclePool с набором статических методов. При запуске локации туда передается XML инструкция для создания объектов, которая сгенерирована редактором локаций. Этот пул создает необходимые объекты. Но не просто так в том количестве, в котором они прописаны в XML, а с максимальной экономией памяти. То есть если 2 объекта одного типа не могут одновременно быть отображены на экране, то и нет смысла создавать два объекта. Будет исползоваться один и тот же, просто его значения будут меняться в соответствии с теми значениями, которые заданы для его координат. Все эти настройки координат хранятся в спецаильной обертке ObjectWrapper
Код AS3:
internal class ObstacleWrapper {
 
 
	public var obstacle:	Obstacle	= null;
	public var isDestroyed:	Boolean		= false;
	public var posX:		int			= 0; 
	public var posY:		int			= 0; 
	public var health:		int			= 0; 
 
	public function ObstacleWrapper() {
 
	}
}
И в пулл помещаются эти обертки, с созданными объектами. Дополнительно у этого класса-пула есть методы для удобного поиска объекта, который нужно добавить на указанные координаты (переместился экран так, что объект скрылся, удаляем его из дисплей листа, вернулся - снова добавляем). Но суть всего этого класса заключается в том, чтобы не создавать все эти обертки и объекты заново при рестарте локации (при проигрыше или по требованию игрока), а просто ресетнуть значения у тех, что уже были созданы и хранятся в пуле

Но Захар мне упорно пытается доказать, что значения должны быть сброшены на значения по умолчанию при извлечении объекта из пула. А если этого не происходит, то это совсем не пул)