Показать сообщение отдельно
Старый 30.09.2013, 17:57
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 3  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Блогер, вообщем-то, всё верно написал.

В моделе, вам необходимо описать 2 разных типа оружия. Оба оружия должны наследовать абстрактный базовый класс всех орудий, например - AGun. В базовом классе - есть методы, необходимые всем орудиям, но конкретную реализацию определяет конкретный наследуемый класс.

В базовом классе, вы добавите курок - onFire. В наследуемом классе, этот "курок" Может автоматически переходить в положение false после выстрела, или ждать внешнюю команду "отжатия" - в зависимости от типа оружия. Соответственно, модель игры ведёт огонь, если курок нажат, и не ведёт, если он отжат.

Всем этим заправляет модель, задача контроллера лишь - дёргать этот курок. Контроллер не должен описывать сам процесс выстрела, эта элементарная задача лежит на моделе. Вообще, все элементарные задачи, должна решать сама модель. Такие как: перемещение физического тела юнита в мире, перезарядка оружия, нанесение урона объекту, если в него попала пуля.. Задача контроллера - более глобальная, он выдаёт приказы, управляет действиями ИИ: юнитА -> переместиться в точку B, юнитБ -> вести огонь по противнику. А элементарное выполнение приказа - лежит на моделе. Ей решать, как конкретный тип юнита будет выполнять этот приказ.

Что-бы легче понять, представьте себе, что модель - это описание мира со всеми его законами. Модель описывает гравитацию, и она же её применяет ко всем объектам в мире. Контроллер же - лишь манипулирует этим миром, создаёт новые объекты, указывает объектам, что они должны сделать. Но как именно это сделают объекты - это решает модель, в соответствий с её законами. Если объект падает в лаву - модель без чьего-либо разрешения - уничтожает этот объект. Ведь в соответствий с её законами, объекты не имеющие флаг "read-only" - уничтожаются в лаве. И конечно, модель высылает событие уведомления о печальной участи объекта.

В визуализаторе архитектура построения отображения - идентична модели. Во вью есть абстрактный базовый класс для всех орудий - AViewGun, все наследуемые классы, самостоятельно определяют, как им отображать их тип оружия.

Как может выглядеть ситуация с выстрелом из дробовика:
Любое оружие в игре, (AGun) имеет курок: onFire (курок нажат/нет). Конкретный класс дробовика, наследует AGun. Далее, дробовик при каждом шаге игры сам проверяет - если его перезарядка выполнена (оружие может выстрелить) и нажат его курок - он стреляет, устанавливая затем новую паузу перезарядки. Внешний код - может 500 раз нажать на курок, но сам выстрел произведёт только дробовик, когда его удовлетворят все условия.
__________________
Дети не должны знать о своих родителях


Последний раз редактировалось Tails; 30.09.2013 в 18:18.