В игре, которую я делал на Java, я столкнулся с интересной ситуацией, которая вполне соответствовала требованиям шаблона прототипа. Видите ли, у меня был этот объект Animation, в котором хранился контейнер изображений для пролистывания, а также некоторые другие данные, которые отслеживали, сколько времени прошло с момента рендеринга последнего кадра, в каком кадре он был, выполнялась анимация или нет и т. д. .
Я обнаружил, что использование одним и тем же объектом анимации несколькими персонажами вызывало проблемы. Если бы у двух персонажей была общая анимация, они бы включали и выключали анимацию в конфликтующие друг с другом моменты времени. Я бы хотел, чтобы ребята стояли на месте с анимацией ходьбы или двигались с анимацией стоя. Создание объектов анимации было дорогостоящим и отнимало много времени, включая создание спрайтов, настройку количества времени, в течение которого они будут отображаться, создание интервальной очереди изображений и т. д.
Вместо этого я сделал объект Animation объектом-прототипом. Если анимация клонирует себя, она разделяет исходную коллекцию кадров со всеми другими анимациями, поскольку они неизменяемы, но их создание требует больших затрат. Вместо этого новые объекты будут использовать эту неизменную базу, но иметь собственную информацию о том, какой кадр рисовать и когда.
Думайте об этом как о проекторе. Когда его клонируют, новый проектор может иметь свою собственную информацию о том, работает он или нет, в каком кадре он находится и т. Д., Но он может использовать тот же кусок пленки, что и исходный проектор. Причина, по которой они не сбивают друг друга с толку, заключается в том, что фильм неизменен. (и дорого в создании)
Честно говоря, использование прототипа таким образом — отличный способ реализовать шаблон легковеса. Объекты, которые разделяют Объекты, которые дорого создавать. Если вы «клонируете» их, они будут созданы с их новым переходным состоянием, но по-прежнему будут делиться этими дорогостоящими базовыми объектами с их создателем.
person
C0M37
schedule
21.12.2012