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

User Tag List

Страница 24 из 71 ПерваяПервая ... 202122232425262728 ... ПоследняяПоследняя
Показано с 231 по 240 из 703

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

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    зачем логике работать с изображением? ну, кроме редких случаев типа ксоникса
    С тайломапами, на базе которых строится изображение. Часто бывает достаточно пробежаться по списку спрайтов на экране чтобы понять кто где и с кем столкнулись. Но зачастую надо определить, на опоре ли стоим, и на опоре какого типа - тут и сгодится тайломап. Ну отсюда неплохо реализовать отрисовку тайломапа в карте. Повторюсь, весь мой "богатый" опыт почерпнут из Саботера. Сюда бы goodboy'а с его опытом расковыривания игр, он бы подсказал какие бывают способы вывода изображения в играх.

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

    По умолчанию

    Возможно добавить возможность выполнять блоки команд при построении изображения. Предварительно в одном блоке Z80 настраивает, что и где нужно вывести. Потом видеокарта обрабатывает и выводит в соответствующими блоками команд.

    COMBLOCK1:
    DW BLOCK1 ; дальний план - заполнение экрана полностью мелкими тайлами
    DW BLOCK2 ; средний план - заполнение части экрана тайлами
    DW BLOCK3 ; отображение спрайтов движущихся объектов
    DW BLOCK4 ; передний план - печать одиночных тайлов

    DW 0 - конец блока

    В каждом блоке заготовки для вывода объектов. Можно поменять координаты, номера спрайтов, адрес таблицы для заполнения фона. Z80 в процессе игры вычисляети заполняет эти параметры, а потом видеокарта это все выводит.

    Давайте описание места запишем на языке, подобном BASIC, в разных стилях:

    BLOCK1 - задний план
    DW SIZE_Y, 8, SIZE_X, 8 - размер тайлов в таблице
    DW ADDR_TL, TILES1 - адрес блока тайлов
    DW Y=0, X=0 - координаты печати таблицы
    DW STR, 24, COL, 32 размер таблицы
    DW ADDR_TAB, LEVEL1 - адрес таблицы
    DW PRINT_TAB - печать таблицы

    DW 0 - конец блока

    BLOCK2 - средний план
    DW SIZE_Y, 80, SIZE_X, 64 - размер картинки 1
    DW ADDR_IMG, IMAGE01 - адрес картинки 1
    DW Y, 20, X, 130 - координаты картинки 1
    DW PRINT_IMG - печать картинки 1

    DW SIZE_Y, 60, SIZE_X, 120 - размер картинки 2
    DW ADDR_IMG, IMAGE02 - адрес картинки 2
    DW Y, 100, X, 4 - координаты картинки 2
    DW PRINT_IMG - печать картинки 2

    DW 0 - конец блока

    BLOCK3 - движущиеся объекты
    DW SIZE_Y, 24, SIZE_X, 16 - размер спрайта
    DW ADDR_SPR, SPITE2 - адрес блока спрайтов
    DW Y=20, X=280 - координаты печати спрайта
    DW PRINT_SPR, 240 - печать спрайта с номером 240

    DW 0 - конец блока


    LEVEL1 - таблица уровня 1
    DB 3, 2, 2, 2, 2, 3 .. ; 32 номера тайлов 1 строки
    ...
    DB 3, 2, 2, 2, 2, 3 .. ; 32 номера тайлов 32 строки

    DB 0 - конец таблицы

    LEVEL2 - таблица уровня 2
    DB 1, 2, 3, 4, 5, 6 .. ; 32 номера тайлов 1 строки
    ...
    DB 7, 8, 9, 0, 1, 2 .. ; 32 номера тайлов 32 строки

    DB 0 - конец таблицы
    Последний раз редактировалось zx-kit; 30.06.2015 в 10:54.
    "L-256"

  3. #233
    Activist
    Регистрация
    21.12.2005
    Адрес
    Kyiv/Ukraine
    Сообщений
    415
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    BLOCK2 - средний план
    BLOCK2 и BLOCK3 практически очень похожи.
    Думаю убрать BLOCK3, оставить BLOCK2.

    Цитата Сообщение от zst Посмотреть сообщение
    LEVEL1 - таблица уровня 1
    Номера тайлов сразу двух байтные делать.
    (Либо же переключатель где-то иметь (1 или 2 байта на номер тайла).)
    V6Z80P - Back for Good

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

    По умолчанию

    Написал видеотест для режима графики 320х240. Разноцветные полосы рисуются по точкам. Рабочие переменные в области атрибутов, поэтому мигают в стандартном режиме. Проверка на наличие карты пока не делается. Время закраски около 2 секунд.

    Jerri и другие программисты. Есть ли информация, как строится изображение в популярных играх для ZX Spectrum? И какие методы закраски могут пригодиться для создания подобных игр в новом режиме графики.
    Вложения Вложения
    Последний раз редактировалось zx-kit; 30.06.2015 в 22:14.
    "L-256"

  5. #235
    Master
    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    835
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    98
    Поблагодарили
    65 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я пишу игры с использованием известной граф.библиотеки( правда на джаве, но может опыт и для спектрума сгодится). Так вот, проверка на столкновение всегда пишется программно!!! Алгоритмы столкновения крайне просты - пересечение ограничивающих прямоугольников или попадание точки в ограничивающий прямоугольник.
    Параметры ячеек игрового мира (тип блока,например, платформа, цельный блок, лестница и пр.) хранится в памяти компьютера, как и массив этих значений для всей игровой карты. Эта информация видеокарте не нужна!!!
    Принцип обработки игрового цикла:
    1. Вычислили промежуток времени с момента прошлой итерации(для 8 бит вычислять не надо)
    2. Подсчитали все координаты обьектов.
    3. Сделали проверку на столкновение и скорректировали результаты.
    4. Отрисовали фон и объекты по вычисленным координатам( причём одной функцией для каждого спрайта по его координате и размеров ограничивающего прямоугольника. Правда в джаве вместо номера спрайта нужно передать ссылку на спрайт)
    Никакой лишней информации видеокарте не нужно отправлять. Видеокарта занимается только выводом.

    ---------- Post added at 02:49 ---------- Previous post was at 02:11 ----------

    Извините, я не совсем понял принцип работы новой видеокарты.
    В программе мы поместили данные в адрес памяти, который служит кодом команды. А как видеокарта определяет, что это новые данные, по факту произведённой записи в память?

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

    По умолчанию

    Цитата Сообщение от Valen Посмотреть сообщение
    BLOCK2 и BLOCK3 практически очень похожи.
    Думаю убрать BLOCK3, оставить BLOCK2.
    Содержимое и количество блоков произвольное. Там могут быть разные команды. Одного блока недостаточно. Например, в одном блоке надо нарисовать фон. А в другом несколько спрайтов движущихся объектов. А кол-во объектов все время разное. Поэтому после всех команд для рисования спрайтов ставим признак END. И видеокарта перейдет к следущему блоку команд.
    Номера тайлов сразу двух байтные делать.
    (Либо же переключатель где-то иметь (1 или 2 байта на номер тайла).)
    Да, надо добавить параметр длины номера тайлов/спрайтов.

    ---------- Post added at 12:56 ---------- Previous post was at 12:41 ----------

    Цитата Сообщение от Smalovsky Посмотреть сообщение
    Я пишу игры ... на джаве, но может опыт и для спектрума сгодится...Параметры ячеек игрового мира (тип блока,например, платформа, цельный блок, лестница и пр.) хранится в памяти компьютера, как и массив этих значений для всей игровой карты. Эта информация видеокарте не нужна!!!
    ...
    4. Отрисовали фон и объекты по вычисленным координатам( причём одной функцией для каждого спрайта по его координате и размеров ограничивающего прямоугольника. Правда в джаве вместо номера спрайта нужно передать ссылку на спрайт)
    Никакой лишней информации видеокарте не нужно отправлять. Видеокарта занимается только выводом.
    Я также предполагал, что мы рисуем фон тайлами и движущиеся объектами одинаковым образом, указывая координаты на экране, прямоугольные размеры объектов и номера. Но посчитали, что при малых размерах тайлов 8х8 и большом экране 320х240 надо каждый кадр пересылать 1200 тайлов. Предложили в новых играх использовать спрайты покрупнее, но для адаптации старых игр размер тайлов/спрайтов желательно оставить старыми.
    Хотя Z80 справился бы, желательно, чтобы в играх, где это возможно, видеокарта сама брала номера тайлов из таблицы в памяти.

    После изображения фона надо изобразить спрайты движущихся объектов, Z80 может подождать видеокарту. Но лучше писать все команды с координатами и номерами не в видеокарту, а в область памяти, откуда видеокарта потом их сама заберет. Поэтому появилась идея деления всех команд на блоки. Т.е. надо обеспечить обработку команд из памяти. Может быть тогда непосредственная запись некоторых команд в регистры видеокарты будет и не нужна.
    Извините, я не совсем понял принцип работы новой видеокарты.
    В программе мы поместили данные в адрес памяти, который служит кодом команды. А как видеокарта определяет, что это новые данные, по факту произведённой записи в память?
    Для параметров типа координат используются последние записанные данные (они запоминаются внутри видеокатры). Для выполнения команд служит сигнал записи в определенные адреса - адреса регистров видеокарты. Для передаче параметров и команд видеокарте выделяется область в адресном пространстве Z80 размером 256 байт. Старший байт этой области я предлагал расположить фиксированно в области атрибутов, так как в новом режиме атрибуты свободны в любой игре. Но поступило предложение настраивать старший байт этой облати. Естественно, его надо будет где-нибудь найти в старой игре или выделить в новой.

    Таким образом, видеокарта имеет 256 входных регистров, в которые мы можем записывать по адресам ПЗУ или ОЗУ (зависит от выбора старшего байта). После включения нового режима видеокарта отслеживает эти адреса и записывает в регистры данные. Некоторые регистры, например, адреса, координаты, цвето точки объеденены по два. После записи в некоторые регистры параметра запускают выполнение команд видеокатры.

    Smalovsky,А какие ориентировочно числа в играх: размер экрана в точках, количество тайлов по-горизонтали, вертикали, размеры тайлов и спрайтов? Как задаются указатели на спрайты (может нам тоже пригодятся)? Сохраняется ли фон перед печатью спрайтов? Какого типа игры и их аналоги среди игр для ZX Spectrum?
    Последний раз редактировалось zx-kit; 01.07.2015 в 11:04.
    "L-256"

  7. #237
    Master
    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    835
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    98
    Поблагодарили
    65 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    Smalovsky,А какие ориентировочно числа в играх: размер экрана в точках, количество тайлов по-горизонтали, вертикали, размеры тайлов и спрайтов? Как задаются указатели на спрайты (может нам тоже пригодятся)? Сохраняется ли фон перед печатью спрайтов? Какого типа игры и их аналоги среди игр для ZX Spectrum?
    Экраннонезависимое разрешение(от 640х480 и выше). Количество спрайтов ограничивается только возможностями видеокарты. Были спрайты 32х60, элементы
    фона 16х16. Опять же всё экраннонезависимо и растягивается до разрешения монитора. В библиотеке libGDX спрайты - это любые изображения, там нет понятий спрайтов и тайлов.
    Ссылка на спрайт - это пременная, которая хранит адрес области памяти, в которой находится спрайт.
    Вообще, современные видеокарты, не оперируют спрайтами и тайлами. Они оперируют текстурами(изображениями в специальном формате) - это как у вас области спрайтов, и текстурными регионами - это как у вас спрайты из заданной области спрайтов. Конечно, может быть много текстур и много текстурных регионов.
    Указатель на спрайт (текстурный регион) задаётся так:
    TextureRegion txtregion = new TextureRegion(Texture,x,y,width,height);
    ,где
    x,y- координаты левого верхнего угла в текстурных координатах (относительно текстуры Texture, в которой хранится спрайт);
    width,height - ширина и высота требуемого спрайта в текстурных координатах.
    Выводит спрайты на экран класс SpriteBatch - это как бы ваша видеокарта и очередь команд. Объект этого класса скрывает от программиста архитектуру видеокарты и предоставляет ему только команды отрисовки. Вот, как рисуются два спрайта:
    spritebatch.begin();// начало очереди команд отрисовки
    spritebatch.draw(txtregion1,x,y);// первая команда очереди - выводим спрайт1 на экран в позицию x,y без изменения его ширины и высоты
    spritebatch.draw(txtregion1,x,y,_width,_height);// вторая команда очереди - выводим спрайт2 на экран в позицию x,y маштабируя его ширину и высоту до требуемых _width,_height
    spritebatch.end();// конец очереди команд и отправка инструкций видеокарте
    Есть интересная команда у SpriteBatch - setColor(R,G,B,Value),в которой
    R,G,B - цвет задаваемый цветовыми компонентами, Value - интенсивность этого цвета. Так вот, эта команда придаёт как бы оттенок(блеск) выводимым спрайтам(цвет и интенсивность этого оттенка заданы в команде). Это называется Tinting.
    Вам тоже можно сделать Tinting. Например, один регистр выделить на цвет, а другой на интенсивность (если он равен 0, то Tinting выключен). Это позволит например делать такой эффект как плавное появление сумерек или рассвет. То есть, с каждым кадром можно плавно увеличивать или уменьшать регистр интенсивности.
    Так же не помешает сделать Blending- прозрачность для выводимых спрайтов. Речь не идёт о прозрачном цвете, нет - он остаётся как есть! Просто задавая величину блендинга можно сразу все видимые пикселы выводимого спрайта сделать полупрозрачными. Вы можете выделить один регистр для блендинга (если он равен 0, то блендинг выключен - спрайт выводится как есть, остальные значения - интенсивность прозрачности - спрайт приобретает прозрачность). Это позволит сделать такой эффект как полупрозрачные облака или окна. Например, мы отрисовали фон без блендинга, затем включили блендинг (задали ненулевое значение) и нарисовали спрайты облаков, затем конечно блендинг нужно отключить(задать нулевое значение) и дальше формировать кадр.

  8. #238
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,556
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    181 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Ну отсюда неплохо реализовать отрисовку тайломапа в карте. Повторюсь, весь мой "богатый" опыт почерпнут из Саботера. Сюда бы goodboy'а с его опытом расковыривания игр, он бы подсказал какие бывают способы вывода изображения в играх.
    а при чём тут вывод изображения, логику не надо с картинкой смешивать
    где-то тайл захотим использовать как опору, а где-то нет
    Прихожу без разрешения, сею смерть и разрушение...

  9. #239
    Activist
    Регистрация
    21.12.2005
    Адрес
    Kyiv/Ukraine
    Сообщений
    415
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ещё проблема есть, со сдвигом тайловой карты (массива).
    Например, для скролла влево на размер тайла,
    нужно будет "сдвинуть влево" карту тайлов
    (и потом справа карты тайлов, добавить новый вертикальный столбец тайлов).

    Сдвинуть нужно 2400 байт или 4800 байт (для двух слоевых игр).
    (и ещё больше нужно двигать, в больших разрешениях)

    Процессором это делать накладно.
    Посему тайловые карты нужно хранить в памяти видео-карты
    и по команде (например "сдвинуть влево") пусть карта и сдвигает этот массив байтов, а не медленный z80.


    В блоках команд, там где указывается адрес тайловой карты,
    просто будет указываться не адрес в спеке, а адрес в карте.
    V6Z80P - Back for Good

  10. #240
    Activist
    Регистрация
    21.12.2005
    Адрес
    Kyiv/Ukraine
    Сообщений
    415
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    делается карта 2 на 2 экрана и закольцовывается
    Пусть так.
    V6Z80P - Back for Good

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

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

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

Эту тему просматривают: 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

Ваши права

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