Важная информация

User Tag List

Страница 44 из 71 ПерваяПервая ... 404142434445464748 ... ПоследняяПоследняя
Показано с 431 по 440 из 703

Тема: Новый графический режим для игр

  1. #431
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,913
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    90
    Поблагодарили
    32 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А как карта будет понимать, что отрисовка слоя закончена, и следующая запись в память - это уже отрисовка следующего кадра? Например, в Саботере достаточно один раз при входе на экран нарисовать задний и передний слой, а в промежуточном слое персонажей графику надо отрисовывать постоянно.

    ---------- Post added at 17:13 ---------- Previous post was at 16:50 ----------

    А еще все же интересно как надо будет переделывать графику. Я опять на примере Саботера (потому что других игр пока не знаю).
    В Саботере фактически 4 способа хранения графики:
    1. Задний фон - тайлы со стандартными атрибутами (9 байт) - выводятся "как есть", но их атрибуты могут быть запросто изменены (комната бессмертия - стены и вещество в ящике, искры на ограде). В почти таком же формате хранятся изображения предметов в ящиках и в руках ГГ.
    2. Спрайты персонажей - всегда монохромные, тайлы спрайтов хранятся по 16 байт (растр + маска), рисуются как правило черным цветом (но иногда цвет ГГ меняется, например, после телепорта или при ударе током, огонь из огнемета охранника, белое метательное оружие на фоне неба).
    3. Спрайты переднего фона - имеют растр, маску и атрибуты (17 байт), тоже могут быть перекрашены (консоль, например, когда на ее ГГ попадает).
    4. Фонт - старндартный формат по 8 байт на символ без атрибутов, раскрашивается при выводе (может быть отрисован как тайлы переднего слоя).

    zst, распиши, пожалуйста, как малыми усилиями переделать графику всех четырех типов? Можно ли это дело автоматизировать с тем, чтобы вначале получить точно так же раскрашеную графику, но без клешинга? Как управлять цветами отрисовки в игре?

  2. #432
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вот интересный проект - очень похоже на то что пытается сделать автор

    http://board.kolibrios.org/viewtopic.php?f=41&t=2868
    http://habrahabr.ru/post/179839/

  3. #433
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    А как карта будет понимать, что отрисовка слоя закончена, и следующая запись в память - это уже отрисовка следующего кадра? Например, в Саботере достаточно один раз при входе на экран нарисовать задний и передний слой, а в промежуточном слое персонажей графику надо отрисовывать постоянно.
    Статические слои можно нарисовать однократно, а потом не трогать. Если для движущихся объектов используются два слоя по-очереди, то надо с помощью переменной current_layer выбирать слой, в котором рисовать. Обычно это делают по сигналу INT. Сначала распределить слои и подобрать удобные режимы цвета для каждого слоя. Допустим для спрайтов выбраны два слоя 2 и 3. Один из них включаем, другой выключаем.

    layer0 = 1 ; задний фон (стены) включен, режим "стандартной графики ZX Spectrum-a"
    layer8 = 1 ; передний фон (ящики) включен, режим "2 цвета на тайл/спрайт + маска"

    layer2 = 1 ; слой спрайтов включен (отображается текущий кадр), режим "2 цвета на тайл/спрайт + маска"
    layer3 = 0 ; слой спрайтов выключен (на нем рисуется очередной кадр), режим "2 цвета на тайл/спрайт + маска"
    current_layer = 3

    Каждый кадр после INT меняем состояние включения 2 и 3 слоев и рисуем следующий кадр на том слое, который выключим:

    layer2 = 0 ; слой спрайтов выключен (на нем рисуется очередной кадр)
    layer3 = 1 ; слой спрайтов включен (отображается текущий кадр)
    current_layer = 2

    Перед рисование новых спрайтов стереть старые в режиме цвета color_mode = COLOR1C, attribute = 0.

    А еще все же интересно как надо будет переделывать графику. Я опять на примере Саботера (потому что других игр пока не знаю).
    В Саботере фактически 4 способа хранения графики:
    1. Задний фон - тайлы со стандартными атрибутами (9 байт) - выводятся "как есть", но их атрибуты могут быть запросто изменены (комната бессмертия - стены и вещество в ящике, искры на ограде). В почти таком же формате хранятся изображения предметов в ящиках и в руках ГГ.
    1 вариант. Используем слой 0 и рисуем в стандартном режиме ZX Spectrum-a:
    current_layer = 0. Дальше записываем атрибут в область атрибутов экрана и 8 байтов пикселов в область пикселов экрана.

    2 вариант. Используем слой 1 и рисуем в режиме графики "2 цвета на тайл/спрайт":
    current_layer = 1, color_mode = COLOR2. Дальше записываем атрибут в переменную attribute и 8 байтов пикселов в область пикселов экрана.
    2. Спрайты персонажей - всегда монохромные, тайлы спрайтов хранятся по 16 байт (растр + маска), рисуются как правило черным цветом (но иногда цвет ГГ меняется, например, после телепорта или при ударе током, огонь из огнемета охранника, белое метательное оружие на фоне неба).
    Используем слой 2 или 3 и рисуем в режиме графики "2 цвета на тайл/спрайт + маска":
    current_layer = 2 или 3, color_mode = COLOR2M. Раз цвета могут меняться, записываем этот цвет в переменную attribute и 16 байтов пикселов в область пикселов экрана, парами байт пикселов, байт маски.
    3. Спрайты переднего фона - имеют растр, маску и атрибуты (17 байт), тоже могут быть перекрашены (консоль, например, когда на ее ГГ попадает).
    Используем слой 8 и рисуем в режиме графики "2 цвета на тайл/спрайт + маска":
    current_layer = 8, color_mode = COLOR2M. Раз цвета могут меняться, записываем этот цвет в переменную attribute и 16 байтов пикселов в область пикселов экрана, парами байт пикселов, байт маски.
    4. Фонт - стандартный формат по 8 байт на символ без атрибутов, раскрашивается при выводе (может быть отрисован как тайлы переднего слоя).
    Используем слой 8 и рисуем в режиме графики "2 цвета на тайл/спрайт":
    current_layer = 8, color_mode = COLOR2. Раз цвета могут меняться, записываем этот цвет в переменную attribute и 8 байтов пикселов в область пикселов экрана.

    zst, распиши, пожалуйста, как малыми усилиями переделать графику всех четырех типов? Можно ли это дело автоматизировать с тем, чтобы вначале получить точно так же раскрашеную графику, но без клешинга? Как управлять цветами отрисовки в игре?
    Вроде расписал. Перед рисованием очередного тайла/спрайта нужно выбрать текущие цвета точек с помощью переменной attribute. В режимах "2 цвета" и "2 цвета + маска" он точно такой же, как и атрибут в стандартной графике ZX Spectrum-а. Цвет можно менять перед рисованием каждого знакоместа или только тогда, когда надо поменять цвет. То есть при отображении объектов одного цвета, например, всех ящиков или текста можно один раз выбрать цвет, а затем рисовать только пикселы ящиков или текста.

    Если требуются еще объяснения для полной ясности деталей новых видеорежимов - спрашивай.

    В первый пост добавил ссылки на текущее описание параметров видеокарты "Meteor Graphics".
    Последний раз редактировалось zx-kit; 30.08.2015 в 09:34.
    "L-256"

  4. #434
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    COLOR1C - 1 цвет на 8 точек + прозрачный
    Данный режим может использоваться для наложения одноцветного изображения поверх существующего. Например, для вывода текста, стирания тайла/спрайта, рисования линий по точкам. По соответствующему адресу в области пикселей нужно записать байт данных. На каждую из восьми точек приходится по 1 биту: 0 - прозрачный, 1 - цветной. Номер цвета задается переменной attribute. 0 - прозрачный, 1-255 выбранный цвет.
    Последний раз редактировалось zx-kit; 30.08.2015 в 09:35.
    "L-256"

  5. #435
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,913
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    90
    Поблагодарили
    32 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    Если для движущихся объектов используются два слоя по-очереди, то надо с помощью переменной current_layer выбирать слой, в котором рисовать.
    Цитата Сообщение от zst Посмотреть сообщение
    Перед рисование новых спрайтов стереть старые в режиме цвета color_mode = COLOR1C, attribute = 0.
    То есть, получается, что карточка всегда рисует то, что в данный момент записано в слой, а, чтобы начать рисовать заново, надо стереть то, что там уже нарисовано? Мне кажется, не самое удачное решение... Получается, что мы экономим такты только на вывод маски, зато тратим их на стирание - это плохо. А нельзя сделать команду "стереть весь слой"?

  6. #436
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    То есть, получается, что карточка всегда рисует то, что в данный момент записано в слой, а, чтобы начать рисовать заново, надо стереть то, что там уже нарисовано? Мне кажется, не самое удачное решение... Получается, что мы экономим такты только на вывод маски, зато тратим их на стирание - это плохо. А нельзя сделать команду "стереть весь слой"?
    Команду "стереть весь слой" можно сделать, но это уже следующий уровень автоматизации. Надо попробовать сначала программное стирание. Времени должно хватить, ведь мы его много сэкономили при рисовании спрайтов. А стирание спрайта быстрее раза в 4, чем его рисование. Надо заполнить прямоугольник по габаритам спрайта байтом FF. А как стираются спрайты сейчас ?
    Все относительно. Надо сравнить время стирание+рисование для старого и нового метода. Если получается быстрее - результат хороший. Не обязательно гнаться за максимальной скоростью.
    Последний раз редактировалось zx-kit; 31.08.2015 в 19:20.
    "L-256"

  7. #436
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #437
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,913
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    90
    Поблагодарили
    32 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    А как стираются спрайты сейчас ?
    А никак не стираются. Ну, вернее, если логика пометила знакоместо как измененное, то оно полностью перерисовывается от заднего фона к переднему. Преимущество в том, что это делается в линейном буфере с фиксированным адресом. А тут придется по знакоместу в дисплее туда-сюда елозить. Хотя, это не должно быть проблемой. Кроме того, 2 из 5 слоев вообще отрисовывать не надо - отрисовать их сразу при перехода в другую комнату, и менять, если что, изменяемую графику только.

  9. #438
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    А никак не стираются. Ну, вернее, если логика пометила знакоместо как измененное, то оно полностью перерисовывается от заднего фона к переднему.
    А с новыми режимами цвета надо будет в знакоместо, помеченное как измененное, просто записать 8 байтов FF для восстановления прозрачности слоя. То есть намного проще и быстрее.
    Преимущество в том, что это делается в линейном буфере с фиксированным адресом. А тут придется по знакоместу в дисплее туда-сюда елозить. Хотя, это не должно быть проблемой. Кроме того, 2 из 5 слоев вообще отрисовывать не надо - отрисовать их сразу при перехода в другую комнату, и менять, если что, изменяемую графику только.
    Для новых режимов можно включить линейную адресацию экрана с адреса 0000: переход к байту справа командой inc h, переход к байту снизу командой inc l.
    Последний раз редактировалось zx-kit; 01.09.2015 в 04:37.
    "L-256"

  10. #439
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,813
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    149
    Спасибо Благодарностей получено 
    1,194
    Поблагодарили
    787 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    Для новых режимов можно включить линейную адресацию экрана с адреса 0000: переход к байту справа командой inc h, переход к байту снизу командой inc l.
    а не наоборот ? ( inc l / inc h )

  11. #440
    Veteran
    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,046
    Спасибо Благодарностей отдано 
    982
    Спасибо Благодарностей получено 
    246
    Поблагодарили
    123 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    только наверно inc l / inc h
    Справа-то только на 32. Поэтому INC H. А то сильно много будет.

Страница 44 из 71 ПерваяПервая ... 404142434445464748 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 18
    Последнее: 11.04.2021, 10:54
  2. графический редактор
    от yur в разделе Вектор
    Ответов: 1
    Последнее: 08.11.2012, 13:01
  3. графический режим на Атари
    от goblinish в разделе Atari
    Ответов: 3
    Последнее: 06.01.2012, 11:19
  4. графический софт для 48 К
    от goglus в разделе Софт
    Ответов: 6
    Последнее: 02.08.2006, 15:33

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •