А как же: http://vtrdos.ru/system.php#s28
или нужен на пц?
А как же: http://vtrdos.ru/system.php#s28
или нужен на пц?
deleted
Последний раз редактировалось drbars; 22.09.2016 в 03:21.
drbars, это не моя процедура :-) Это из книжки "Как написать игру на ассемблере".
По поводу хранения спрайта строками. Фактически переход к следующему байту строки это INC L (INC E), а к следующему байту столбца - INC H (INC D). Равнозначно. От постолбцового вывода выигрыш на спрайтах маленького размера, < 8. На практике таких спрайтов большинство. И наоборот - для вывода больших спрайтов-пейзажей обычно не требуется особая скорость (если требуется - применяются совсем другие методы). Потому что по столбцам во внутреннем цикле гарантированно выводится 8 байт, а по строкам меньше. А LDI использовать нельзя - у нас логические операции.
Последний раз редактировалось Oleg N. Cher; 18.09.2016 в 17:49.
Oleg N. Cher, следующий этап — сохранение фона перед выводом спрайта, и при последующем выводе восстановление и новое сохранение. В случае использования логических наложений, особенно с маской это обязательно.
Знаю, drbars. Но тут для меня начинается высшая математика и что-то непостижимое. Есть люди, которые самыми неприхотливыми средствами делают настоящие чудеса, я могу только восторгаться или мечтать повторить. С масочными спрайтами работал только один раз, это был вывод пушечного ядра в игре SeaFight, и делался он точками, притом процедурой в ПЗУ.
Oleg N. Cher, вот пример... вывод спрайта с маской без таблиц движения. Делал для игры, но потом переписал под табличный способ.
http://zx-pk.ru/threads/23544-vyvod-sprajta-po-x-y.html
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
- - - Добавлено - - -
А эффективнее по памяти или по скорости? По скорости таблица вне конкуренции - 32 такта на байт.
- - - Добавлено - - -
Чем-то помочь, рассказать?
- - - Добавлено - - -
Для этого в библиотеке надо поддержать непрямоугольные спрайты, иначе для фигуристых спрайтов будет работать очень медленно и жрать пямять. Вот тут как бы и начинается специфика Спектрума: в одних играх спрайты прямоугольные и такие извращения будут тормозить, в других нудна поддержка непрямоугольных спрайтов, в результате общие библиотеки неэффективны, каждый пишет своё с учетом 1000 и одного нюанса.
ZX Evolution Rev C + ZXM-SoundCard Extreme + NeoGS.
Alex Rider, я обязательно воспользуюсь любезным предложением помочь с матчастью: туда дальше вынесу на общую разработку пару своих идей игр, просто не надеюсь, что кто-то захочет присоединиться, из-за чего интерес не очень сильный. А так - художник нужен, музыкант, возможно, хард-кодер ассемблерщик. Но двигаться конечно планирую в своём контексте, т.е. писать на Обероне.
То, что есть специфика, и её надо учитывать - никакой библиотекой не поправишь. И так в любом деле. В книге "Как написать игру на ассемблере" есть вывод спрайтов произвольной конфигурации. И процедура там приводится очень простая. Но она так проста лишь только потому, что там координаты для вывода спрайта знакоместа вшиты в сам спрайт, в каждое его знакоместо. Если там хранить смещения и прибавлять к ним при выводе реальные координаты, пересчитывая их в адреса экрана и атрибутов, угадайте что будет? Правильно - будет довольно тормознуто.
Я просто не собираюсь писать игры со всякими фигурными спрайтами, масками и прочим, отсюда и такой скромный круг задач, которые я перед собой ставлю. Выше головы не прыгнешь - пусть игры делают те, у кого талант. Я со своей стороны буду совершенствовать ZXDev.
Про зеркалирование: конечно интереснее оптимизировать по скорости, но если табличка будет 256 байт, а у меня в игре всего один спрайт, который нужно зеркалить, и он шириной 2 знакоместа, то тут начинается стрельба по воробьям. В целом же было бы интересно сделать максимально эффективно по скорости, разумно по памяти, но без таблицы.
ZX_NOVOSIB, как видим, желающих клонировать Буратино не наблюдается. Никому не интересно.
P.S. Кстати, я адаптировал к ZXDev пару процедур атрибутного скроллинга из Supercode. То есть, Supercode намечен. Присоединяйтесь.
deleted
Последний раз редактировалось drbars; 22.09.2016 в 03:21.
Так может дать возможность выбора разработчику - скорость или размер?
- - - Добавлено - - -
Если нужно развернуть не один байт, а изображение спрайта в памяти,
то обработать попарно можно так (для простоты только внутренний цикл):
Код:col_mirror_loop: dec hl ld a, (de) ld c, (hl) ; ------------------ ; byte mirroring ; ------------------ DUP 8 rla rr c EDUP ; ------------------ rla ld (de), a ld (hl), c inc de djnz col_mirror_loop
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)