![]() |
Взаимодействие основных классов MVC
Я для тренировки пытаюсь написать управляемую ракету с возможностью поворота, и включения выключения двигателя. в классе модели у меня будет обрабатываться текущие характеристики ракеты, то есть её скорость, ускорение, направление носа ракеты. А в классе отрисовки на каждом кадре нужно пот класса модели получать только текущие показатели x, y, и угол поворота картинки ракеты. Вот вопрос в том, как эти параметры лучше передавать в класс отрисовки? Через публичные переменные класса модели? Но это по-моему как-то не правильно, т.к. тогда теоретически есть возможность изменять эти переменные из любого класса помимо класса модели.
И ещё вопрос собственно по самой MVC. Такая система достаточно логичная и правильная? 1. Класс отрисовки (View) занимается что по каждому ENTER_FRAME отрисовывает текущее положение ракеты, и в принципе больше никак и ни с чем не взаимодействует. 2. Класс управления (Сontrol) будет при нажатии нужных клавиш передавать информацию об этом в класс модели. 3. Класс модели (Model) будет будет в себе иметь так сказать виртуальный космос со своими законами движения и ракету. При сигналах от класса управления о зажатии какой-то клавиши поворачивать ракету или включать/выключать двигатель. При этом, хотя отрисовка вся будет через ENTER_FRAME, в модели я хочу сделать всё через реальное время, и при изменении FPS в принципе ничего меняться тогда не должно. |
|
Мне больше нравится вариант, когда в каком-то контроллере более высокого уровня (не важно, как мы его назовем, на самом деле: контроллер, управляющий класс, геймплейменеджер) тикает счетчик (таймер, энтерфрейм, события с сервера -- не важно), по которому обновляется физический мир.
Это может быть, как и одна моделька вашей ракеты, так и модель всего физического мира (мне так больше нравится), где будет список всех взаимодействующих тел. Вызывается обновление физ мира, внутри обновляются все тела и производятся еще какие-нибудь дополнительные вычисления. А с отображением уже есть варианты. Если объектов немного, то можно при изменении моделек испускать событие, которое будет ловится въюхой этой конкретной модели. И вьюха будет апдейтить себя. Если же объектов много или просто не нравится вариант с событиями в данном случае, то после апдейта физ мира из контроллера игры вызывается апдейт игровой вьюхи, в которой и содержатся отображения моделей физ мира. И там, так же, как и в модели мира, проходим по списку отображений и апдейтим их. А модель должна предоставлять все необходимые методы доступа (пусть даже только для чтения). |
| Часовой пояс GMT +4, время: 17:50. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.