С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Сугубо моё видение того, к чему надо стремиться, на данный момент таково:
1. Должен использоваться кросс ассемблер (sjasm+) с самосборкой и автозапуском в эмуляторе для отладки.
2. Процедуры движка поделены на функции и минимально документированы. Комменты - не обязательны, достаточно описания функционала и входных параметров.
3. Во внутренней архитектуре отдельно выделена функция логики (в которой происходит обработка действий игрока, AI, минимальная игровая физика для и тд). Логика по мере отработки игровой ситуации записывает в небольшой буфер обмена информацию по типу: номер отображаемого спрайта, координаты на экране, тип спрайта (попиксельный, аттрибутный итд). Логика каким-то еще образом (детально еще не продумывал) может репортить необходимость перерисовки тайлового бэкграунда, скорее всего в виде текущей координаты левого верхнего угла экрана относительно карты бэкграунда.
4. Буфер обмена отдельно отрабатывается т.н. "мэнэджером" который берет информацию о спрайтах из таблицы, подключает нужные банки памяти и запускает с этой инфой запрошенные процедуры отрисовки спрайтов. Здесь же может производиться бэкап бэкграунда под спрайтами, вывод тайлового фона и что угодно. Этот же менеджер выбирает в каком экране надо рисовать, а какой отображать.
5. На данный момент логика у меня выведена на прерывания, что даёт некоторые преимущества (типа естественной системы FPS), но и несёт с собой множество спорных нюансов. Сей пункт даже сейчас под вопросом.
Основной плюс такой системы - если я захочу оптимизировать движок и что-то кардинально переделать в системе вывода на экран, то игровую логику это не затронет вообще никак. В идеале в ней не изменится ни байта, плюс ко всему она полностью вынесена в отдельный файл, что позволяет менять только её.
Таблица спрайтов сделана элементарно просто, это не более чем номер спрайта, адрес в памяти, номер банка и ширина с высотой. Соответственно такую таблицу можно довольно просто хранить отдельно и при желании даже автоматом генерить.
Добавлено через 4 минуты
спасибо за пример, это очень близко к тому, каким подобную концепцию вижу себе я. В вышеприведенном я бы только отделил детекцию столкновений в отдельный функционал, потому что в разных проектах это может требоваться по-разному. То, что представляю себе я - это чисто графический инструментарий, поэтому любая логика/псевдофизика, имхо, должна быть реализована отдельно.
Последний раз редактировалось moroz1999; 11.03.2008 в 00:28. Причина: Добавлено сообщение
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)