PDA

Просмотр полной версии : Взаимодействие основных классов MVC


LIGHTHILL
02.11.2013, 16:24
Я для тренировки пытаюсь написать управляемую ракету с возможностью поворота, и включения выключения двигателя. в классе модели у меня будет обрабатываться текущие характеристики ракеты, то есть её скорость, ускорение, направление носа ракеты. А в классе отрисовки на каждом кадре нужно пот класса модели получать только текущие показатели x, y, и угол поворота картинки ракеты. Вот вопрос в том, как эти параметры лучше передавать в класс отрисовки? Через публичные переменные класса модели? Но это по-моему как-то не правильно, т.к. тогда теоретически есть возможность изменять эти переменные из любого класса помимо класса модели.
И ещё вопрос собственно по самой MVC. Такая система достаточно логичная и правильная?
1. Класс отрисовки (View) занимается что по каждому ENTER_FRAME отрисовывает текущее положение ракеты, и в принципе больше никак и ни с чем не взаимодействует.
2. Класс управления (Сontrol) будет при нажатии нужных клавиш передавать информацию об этом в класс модели.
3. Класс модели (Model) будет будет в себе иметь так сказать виртуальный космос со своими законами движения и ракету. При сигналах от класса управления о зажатии какой-то клавиши поворачивать ракету или включать/выключать двигатель. При этом, хотя отрисовка вся будет через ENTER_FRAME, в модели я хочу сделать всё через реальное время, и при изменении FPS в принципе ничего меняться тогда не должно.

Akopalipsis
02.11.2013, 16:27
Вы вот эти темы читали раз (http://www.flasher.ru/forum/showthread.php?t=203620) два (http://www.flasher.ru/forum/showthread.php?t=138349) ? Там есть ответы почти на все вопросы. Но читать придётся страниц 150.

Добавлено через 16 минут
в модели я хочу сделать всё через реальное время, и при изменении FPS
Вы так умеете? Как так сделать?

ChuwY
02.11.2013, 16:52
Мне больше нравится вариант, когда в каком-то контроллере более высокого уровня (не важно, как мы его назовем, на самом деле: контроллер, управляющий класс, геймплейменеджер) тикает счетчик (таймер, энтерфрейм, события с сервера -- не важно), по которому обновляется физический мир.
Это может быть, как и одна моделька вашей ракеты, так и модель всего физического мира (мне так больше нравится), где будет список всех взаимодействующих тел. Вызывается обновление физ мира, внутри обновляются все тела и производятся еще какие-нибудь дополнительные вычисления.
А с отображением уже есть варианты.
Если объектов немного, то можно при изменении моделек испускать событие, которое будет ловится въюхой этой конкретной модели. И вьюха будет апдейтить себя.
Если же объектов много или просто не нравится вариант с событиями в данном случае, то после апдейта физ мира из контроллера игры вызывается апдейт игровой вьюхи, в которой и содержатся отображения моделей физ мира. И там, так же, как и в модели мира, проходим по списку отображений и апдейтим их.
А модель должна предоставлять все необходимые методы доступа (пусть даже только для чтения).