Просмотр полной версии : Спрайтовывыводилка с пиксельной точностью без таблиц
shadwork
04.06.2014, 10:40
Есть у кого-то пример вывода спрайта с пиксельной точностью без создания таблиц ? Сколько это будет по тактам если спрайт 4*4 знакоместа ?
Дальний прицел - поработать с графикой в стиле черная обводка в 16 пикселей.
Исходные тексты приветствуются ;). К спрайтовыводилке желательно спрайтонарезалку на ПЦ ;)
Ну или просто подскажите где и кем реализованы библиотеки для простых спрайтов ? SDCC приветствуется
Shadow Maker
04.06.2014, 11:28
Да вагон их. Процедуры же пишутся от реальных задач. Вон на zxpress простых без стека тысячи - https://www.google.ru/search?client=opera&q=site:zxpress.ru+%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D 1%8C+%D1%81%D0%BF%D1%80%D0%B0%D0%B9%D1%82%D0%B0&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest&gws_rd=ssl
shadwork
04.06.2014, 11:35
Ладно. Только руками из тысячи - только хардкор ! Я просто подумал что некий универсальный метод уже давно есть в виде отлаженной библиотеки. Очевидно что у каждого она своя. Тему закрываем.
Alex Rider
04.06.2014, 12:09
Очевидно что у каждого она своя.
Я бы только чуть точнее сформулировал: ждя каждой задачи она своя, универсальной не бывает.
Shadow Maker
04.06.2014, 13:01
Я так и написал в общем-то. Для каждого движка - своя процедура нужна. Где надо шустро и много памяти - фигачат сдвинутые спрайты. Где-то можно без этого, но надо память - хранят спрайты несдвинутые. Где-то вообще пофиг на скорость - вообще сжатые по RLE например спрайты хранят. И с автомасками/без автомасок.
Короче куча подходов, нет универсальной процедуры.
А где были спрайты, сжатые по RLE?
Shadow Maker
04.06.2014, 13:17
В Операции Р.Р., например. В третьем уровне. Тока не факт, что именно по классическому RLE, но упакованы были повторяющиеся байты и еще что-то.
А где были спрайты, сжатые по RLE?
сжатые были еще в Savage, Trantor, наверняка еще в каких играх от Perry
Есть у кого-то пример вывода спрайта с пиксельной точностью без создания таблиц ?
Совсем без таблиц не получится. Минимум: таблица экрана, и зеркалирования.
По скорости, если с маской и восстановлением фона.. где-то пол фрейма по времени.
Пример http://zx.pk.ru/showpost.php?p=715442&postcount=1
Вывод спрайтов без буферов - blade warrior. 8 подпрограмм для каждого пикселя. Байты ротируются в регистрах, непосредственно при выводе. Вывод идет сразу на экран, фон берется из копии. Спрайт сам стирает свой след. Очень, очень быстро - игра 50 fps. Но пересечения спрайтов не поддерживаются.
С буферами - silk worm. Спрайт копируется в буфер ротации, который +1 байт по Х. Далее ротируется на 4 бита вправо и/или на 1 бит влево/вправо нужное число раз. Для позиций 6,7 копируется со смещением на байт. Все спрайты либо 3*3 либо 1*1.
Screw, каждый автор изобретает свой велосипед, такой на котором ему удобно ехать. Постом выше, мой аналог похожий по алгоритму на silk worm
Alcoholics Anonymous
20.08.2015, 20:23
Плохо переводится английское следующим образом.
Ладно. Только руками из тысячи - только хардкор ! Я просто подумал что некий универсальный метод уже давно есть в виде отлаженной библиотеки. Очевидно что у каждого она своя. Тему закрываем.
Там нет такого понятия, как один спрайт двигателя, который может сделать все, но есть несколько спрайтов двигатели доступны с C, которые могут сделать много.
https://drive.google.com/file/d/0B6XhJJ33xpOWTWY3YV9YLVJkVGs/view?usp=sharing
====
sp1:
спрайт двигатель, который поставляется с z88dk, используемых в 30 играх. Нет ограничений на размер и количество спрайтов (кроме того, что она влияет на скорость), поддержка фоновых анимации, никогда не будет мерцать и нет необходимости, чтобы VSync. Дорогой в памяти и не прокрутки.
sp1/simple
Создает несколько масок спрайты и перемещает их вокруг.
sp1/tritone (исходный код по-прежнему использует версию развития z88dk которые в настоящее время включены в основной пакет)
Пьесы BEEPER музыку во время движения спрайтов.
ENTER: нот изменения
S: удерживайте, чтобы остановить музыку
М: переключение способа спрайт дро. Один метод рисует один спрайт между звуковым сигналом строк, другие все три спрайтов
====
FASE
До 12 16x16 пикселей спрайты на 50 кадров в секунду. Нет прокрутки и не используется ни для чего еще.
fase/game.tzx
demo
fase.zip/doc/readme.html
====
двигатели Multicolour
BIFROST, NIRVANA
http://www.ime.usp.br/~einar/bifrost/
====
SDCC можно использовать из z88dk. Если вы сделаете это, ваш код будет меньше и быстрее, и ЭЛТ предоставляются для вас уже.
Существует некоторая документация здесь:
http://www.z88dk.org/wiki/doku.php?id=temp:front
Некоторые из авторов выше, не являются экспертами по компиляторов, чтобы они не делают двигатели доступны в наилучшим образом для С. Если вы хотите, чтобы попробовать любой из них, дайте мне знать, и я могу обновить свои пакеты.
;;;; English ;;;;
There is no such thing as one sprite engine that can do everything but there are several sprite engines available from C that can do a lot.
https://drive.google.com/file/d/0B6XhJJ33xpOWTWY3YV9YLVJkVGs/view?usp=sharing
====
sp1:
sprite engine that comes with z88dk used in about 30 games. No limit on size and number of sprites (except that it affects speed), support for background animations, will never flicker and no need to vsync. Expensive in memory and no scrolling.
sp1/simple
Creates some mask sprites and moves them around.
sp1/tritone (source code is still using development version of z88dk which is now incorporated into the main package)
Plays beeper music while moving sprites.
ENTER : change music
S : hold down to stop music
M : toggle sprite draw method. One method draws one sprite between beeper rows, other all three sprites
====
FASE
Up to 12 16x16 pixel sprites at 50 fps. No scrolling and not used for anything yet.
fase/game.tzx
demo
fase.zip/doc/readme.html
====
Multicolour engines
BIFROST, NIRVANA
http://www.ime.usp.br/~einar/bifrost/
sdcc can be used from z88dk. If you do so, your code will be smaller and faster and the crts are provided for you already.
There is some documentation here:
http://www.z88dk.org/wiki/doku.php?id=temp:front
Some of the authors of the above are not experts on the C compilers so they didn't make the engines available in the best way for C. If you want to try any of them let me know and I can update their packages.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot