User Tag List

Страница 12 из 32 ПерваяПервая ... 8910111213141516 ... ПоследняяПоследняя
Показано с 111 по 120 из 317

Тема: GameNoname

  1. #111

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Имхо на векторе не так уж мало многоцветных игр с моргающими спрайтами.

  2. #112

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    482
    Спасибо Благодарностей отдано 
    139
    Спасибо Благодарностей получено 
    390
    Поблагодарили
    145 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Имхо на векторе не так уж мало многоцветных игр с моргающими спрайтами.
    Но много и хороших годных игр. Я сам вот не знал что вообще был такой компьютер как Вектор оказывается (а он смотрю очень крут для тех времен). Детство с БК-Синклер. И да, спрайты моргали во многих играх. Считалось вполне нормальным в те годы. Челендж мол сделать чтобы не моргали и не потерять полноцветность и скорость. Я не смог так на УКНЦ. Полноцветно только штук 5 спрайтов 16х16 с бэкграундом на 25fps вышло. Но .. многое можно пофиксить геймдизайном же.

  3. #113

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,299
    Спасибо Благодарностей отдано 
    1,028
    Спасибо Благодарностей получено 
    813
    Поблагодарили
    484 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если игра увлекательная и красивая, то если там мельтешит где-то иногда, это не страшно. Даже на NES все время всякая хрень выскакивает в играх там и сям. Геймплей важнее.
    Больше игр нет

  4. #114

    Регистрация
    13.05.2018
    Адрес
    г. Тамбов
    Сообщений
    817
    Спасибо Благодарностей отдано 
    345
    Спасибо Благодарностей получено 
    659
    Поблагодарили
    200 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Привет всем...

    Думаю без буфера - спрайты будут мерцать...
    Пусть померцают...

    ???

  5. #115

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    482
    Спасибо Благодарностей отдано 
    139
    Спасибо Благодарностей получено 
    390
    Поблагодарили
    145 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Stl75 Посмотреть сообщение
    Пусть померцают...
    Там сложнее другое. Я знаю этот набор картинок, это называется 2d pixel dungeon asset pack, увы - самое сложное рисовать картинки для игры самому (тайлы/спрайты), если игру не передирать с чего-то - это дело застрянет на полпути (рисовать 8-бит графоний не все умеют, программерам это сложно до ужасу, рисовал паука в 4-х цветах почти полдня и он получился говеным, после чего руки начали опускаться)
    Шедевр портирования на УКНЦ - игра Highway Encounter
    Эмуляторы: UKNCBTL, EmuStudio (респект авторам)

    Этот пользователь поблагодарил BlaireCas за это полезное сообщение:

    parallelno(03.09.2022)

  6. #116

    Регистрация
    29.06.2022
    Адрес
    г. Ирвайн, США
    Сообщений
    408
    Спасибо Благодарностей отдано 
    590
    Спасибо Благодарностей получено 
    340
    Поблагодарили
    109 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Размышляя о том как организовать рендер с двойной буферизацией родил вот такой псевдокод ниже. Сильно смущают большие накладные расчеты. Можно конечно попробовать заменить tileGfxBuffer на связный список чтобы при отрисовке пропускать незадействованные тайлы, но не уверен что это сильно поможет.
    Возможно есть элегантный и быстрый способ оргинизовать тайловый рендер, поделитесь знанием.

    Код:
    ; =====================================================================
    ; data
    
    ; a pointer to tileGfx in the tileGfxBuffer
    currentTileGfxPtr:
    			.word TEMP_ADDR
    
    ; a table of tileGfx pointers
    tileGfxPtrTable:
    			.storage ROOM_TILES_W * ROOM_TILES_H * ADDR_LEN, 0
    
    ; an array of tileGfx
    tileGfxBuffer:
    			.storage TILE_GFX_MAX * TILE_GFX_LEN, 0
    
    ;	struct tileGfx:
    ;		tilePtr - a pointer to a tile in tileGfxPtrTable. if it's 0, that means tileGfx is vacant
    ;		tileGfxData - graphics data. if it's empty, that means this tile needs to be erased from the screen.
    
    ; =====================================================================
    ; tile rendering routine
    currentTileGfxPtr = an address of the first tileGfx in tileGfxBuffer that has tilePtr = 0
    
    for every visible sprite
    	for an every sprite tile
    		calculate a tile index N in tileGfxPtrTable
    		
    		if tileGfxPtrTable[N] == 0:
    			tileGfxPtrTable[N] = currentTileGfxPtr
    			currentTileGfxPtr->tilePtr = &tileGfxPtrTable[N]
    			draw a tile w/o a mask into currentTileGfxPtr->tileGfxData
    			currentTileGfxPtr = an address of the next tileGfx in tileGfxBuffer that has tilePtr = 0
    		else:
    			draw a tile with a mask into currentTileGfxPtr->tileGfxData
    
    for every tileGfx in tileGfxBuffer
        if tileGfx.tilePtr == 0:
    		continue
    	if tileGfx.tileGfxData is not empty:
    		draw tileGfxData on the screen.
    	    tileGfx.tileGfxData = empty
    	else:
    		erase tile on the screen.
    	    tileGfx->tilePtr = 0 ; set 0 a tileGfx pointer in tileGfxPtrTable
    		tileGfx.tilePtr = 0
    - - - Добавлено - - -

    Уточню что tileGfx.tileGfxData = empty не означает стирание данных, а только маркировка их как стертых.
    Структуру tileGfxData не привожу так как до конца ещё не определился, но там как минимум есть флаг говорящий что данные есть или данных нет.

    - - - Добавлено - - -

    Поясню как это работает если код выше не очень понятен.
    У нас есть таблица адресов на структуры tileGfx.
    Эта таблица имеет столько элементов сколько нужно тайлов на экране.
    У нас есть массив tileGfxBuffer из элементов tileGfx.
    Отрисовка состоит из двух этапов.
    Первый это заполнить массив tileGfxBuffer данными спрайтов которые хотим отрисовать.
    На втором этапе мы копируем данные из tileGfxBuffer на экран, или стираем с экрана старые спрайты.
    Таблица tileGfxPtrTable нужна что быстрее найти элемент tileGfx в массиве tileGfxBuffer в который нужно скопировать данные спрайта.

  7. #117

    Регистрация
    29.06.2022
    Адрес
    г. Ирвайн, США
    Сообщений
    408
    Спасибо Благодарностей отдано 
    590
    Спасибо Благодарностей получено 
    340
    Поблагодарили
    109 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Stl75 Посмотреть сообщение
    Привет всем...

    Обычно мерцание спрайтов - буфером устраняется...
    Но тут видать - вариант особый...

    Для особого варианта - можно сделать так...

    1. Делаем карту экранов.
    То есть - каждый экран делим на области.
    Экран задействован не весь, поэтому делим через массив...

    2. Смещаем персонажей - не по номерам,
    а по областям экрана, в которых они находятся...

    3. Между областями экрана по периметру -
    делаем буферные области, которые обсчитываются
    по-другому, чтобы устранить мерцание спрайтов
    между областями экрана...

    ???
    Если честно, то я не совсем понял идею.
    Напиши пожалуйста что скрывается под многоточия и и знаками вопроса.

    - - - Добавлено - - -

    Цитата Сообщение от jerri Посмотреть сообщение
    блин 30 лет технологий и снова сочиняем велосипеды, самокаты и прочие велобеги.

    1 синхронизация по прерываниям.

    1.1
    50 раз в секунду выполняются прерывания.
    выбираем кратность и например со скоростью 1 через 2 выполняем обработку всех персонажей на экране.
    результат обаботки записываем в один из двух списков выводимых спрайтов

    1.2
    во внешнем рендере выбираем один из двух списков и отрисовываем все спрайты по списку выбранным способом

    плюсы - стабильная скорость персонажей, стабильная скорость героя.


    Теперь об отрисовке
    На примере игры Jack the Nipper 2
    вывод спрайтов с маской поверх фоновой графики и других спрайтов
    также возможен спрайт за предметами Фореграунда

    Титульный экран
    Вложение 77735

    состоит если присмотреться из блоков 32*32 которые состоят из элементов 8*8

    Вложение 77736

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

    при отрисовке персонажей создается модифицированный набор элементов куда копируются элементы фона поверх которых накладываются спрайты.

    на экран выводятся либо модифицированные элементы, либо фоновые которые надо восстановить

    Вложение 77737
    Два списка выводимых спрайтов для того чтобы не пересекаться с измененными данными обработки всех персонажей?
    А что включает в себя таблица действий? Можешь прописать по подробнее, пожалуйста?

    - - - Добавлено - - -

    Ещё было бы здорово если бы ты описал подробнее из каких элементов состоит карта экрана и структуру набора модифицированных элементов.

  8. #118

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    482
    Спасибо Благодарностей отдано 
    139
    Спасибо Благодарностей получено 
    390
    Поблагодарили
    145 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если есть возможность переключать экраны:
    Рисуешь тайлы в оба экрана изначально. Затем рисуешь в например первый экран спрайты уж там с маской без маски как угодно. Помечаешь битом в таблице тайлов куски 16х16 скажем которые были затронуты прорисовкой спрайтов. Переключаешь экран туда. Затем восстанавливаешь тайлы которые были помечены и были под спрайтами. Рисуешь аналогично на второй экран, помечаешь затронутые куски, переключаешь экран туда, затем оттуда тоже восстанавливаешь затронутый бэкграунт.. ну ит.д.

    Если нет возможности переключать экраны:
    Рисуешь то-же самое в куске памяти. Помечаешь какие тайлы затронули нарисованные спрайты уже двумя битами типа 11. Выводишь на экран куски из буфера которые были затронуты (помечены первым или вторым битом). Восстанавливаешь тайлы помеченные первым битом при этом перемещая его во второй. (это будет нужно если спрайт "прыгнет" через тайл чтобы вывести на экран все-же восстановленный тайл бекграунда потом хотя мол туда ничего не рисовалось)
    Шедевр портирования на УКНЦ - игра Highway Encounter
    Эмуляторы: UKNCBTL, EmuStudio (респект авторам)

  9. #119

    Регистрация
    29.06.2022
    Адрес
    г. Ирвайн, США
    Сообщений
    408
    Спасибо Благодарностей отдано 
    590
    Спасибо Благодарностей получено 
    340
    Поблагодарили
    109 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Если есть возможность переключать экраны:
    Рисуешь тайлы в оба экрана изначально. Затем рисуешь в например первый экран спрайты уж там с маской без маски как угодно. Помечаешь битом в таблице тайлов куски 16х16 скажем которые были затронуты прорисовкой спрайтов. Переключаешь экран туда. Затем восстанавливаешь тайлы которые были помечены и были под спрайтами. Рисуешь аналогично на второй экран, помечаешь затронутые куски, переключаешь экран туда, затем оттуда тоже восстанавливаешь затронутый бэкграунт.. ну ит.д.

    Если нет возможности переключать экраны:
    Рисуешь то-же самое в куске памяти. Помечаешь какие тайлы затронули нарисованные спрайты уже двумя битами типа 11. Выводишь на экран куски из буфера которые были затронуты (помечены первым или вторым битом). Восстанавливаешь тайлы помеченные первым битом при этом перемещая его во второй. (это будет нужно если спрайт "прыгнет" через тайл чтобы вывести на экран все-же восстановленный тайл бекграунда потом хотя мол туда ничего не рисовалось)
    У меня нет возможности переключать экраны, поэтому спрошу про твой второй подход.
    Скажи пожалуйста а почему помечать какие тайлы затронули битами типа 11 лучше чем в моем варианте? И ещё вопрос, в этом варианте не используется буфер тайлов? Все делается в "куске памяти"? Какая его структура?

  10. #120

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    482
    Спасибо Благодарностей отдано 
    139
    Спасибо Благодарностей получено 
    390
    Поблагодарили
    145 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А в тайловом буфере ведь все-равно будешь хранить информацию в битах мол тут проходимо, тут непроходимо, тут кислоту кто-то разлил на пол и наступить нельзя, тут дыра в полу и провалишься скажем на нижний уровень если не перепрыгнуть и т.д.
    То-есть весь экран будет поделен скажем на 16х16 куски в которых будут # тайлов пола собственно (бекграунда) и плюс еще какая-то битовая информация. Можно сделать что в эту битовую информацию до кучи пишется бит "сюда рисовали спрайт в этот квадратик и его надо вывести на экран и потом восстановить взад тем тайлом который там был до этого и перевести бит изменений во второй" и второй бит "сюда рисовали что-то на прошлом кадре, но сейчас спрайт убежал и восстанавливать ничего не надо, а просто вывести на экран этот кусок 16х16 и обнулить бит".

    (с буферизацией будет тормозно ибо скажем спрайт находится посредине и затрагивает 4 тайла вокруг себя - их придется все четыре перерисовывать на экран сначала, а затем прорисовывать в буфер обратно взад уже без спрайтов и это будет оверхед прорисовки, но что поделать, зато нормально выглядеть станет)
    Последний раз редактировалось BlaireCas; 03.09.2022 в 13:19.
    Шедевр портирования на УКНЦ - игра Highway Encounter
    Эмуляторы: UKNCBTL, EmuStudio (респект авторам)

Страница 12 из 32 ПерваяПервая ... 8910111213141516 ... ПоследняяПоследняя

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

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

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

Ваши права

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