Продолжение эпопеи:
Продолжение эпопеи:
С уважением, Станислав.
parallelno(25.01.2024), svofski(25.01.2024), Trol73(25.01.2024), vernigor(26.01.2024)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Оживляем игровой фон:
С уважением, Станислав.
AlexBel(06.02.2024), Oleg N. Cher(30.01.2024), parallelno(29.01.2024), Pluto(06.02.2024), svofski(29.01.2024), Trol73(29.01.2024), vernigor(31.01.2024)
Печатаем спрайт с маской:
С уважением, Станислав.
AlexBel(06.02.2024), ivagor(06.02.2024), Oleg N. Cher(05.02.2024), Pluto(06.02.2024), svofski(05.02.2024)
Коротенькая работа над ошибками. Спасибо ivagor'у!
Последний раз редактировалось CityAceE; 08.02.2024 в 09:23.
С уважением, Станислав.
parallelno(08.02.2024)
Еще раз присоединюсь к svofski, что это мелочи, на которые не стоит обращать много внимания, пока они не станут критичными. Лучше бы я пока помолчал, но теперь могу только учесть на будущее.
У меня еще вопрос, который возможно ты затрагивал в первых видео, которые я, признаюсь, подробно не смотрел. Почему не взял за основу какой-нибудь спековский игровой движок? Понятно, что современные движки сложные, зато их авторы теоретически могли помочь разобраться и упростить. Хотя конечно они (авторы движков) люди занятые и могли отказаться, тогда вопросов нет.
Вот как раз момент с OR/XOR (HL) не является мелочью, а является наглядным примером того, как можно одновременно сократить размер, сделать быстрее и понятнее код. Именно поэтому я решил снять короткий ролик. А другие ошибки типа опечаток я просто правлю тихонько за кадром. Но здесь был не тот случай! А я ещё как раз сидел и думал, как бы избавиться от PUSH/POP BC в этой процедуре. Нутром чуял, что можно, но в итоге так и забыл про (HL).
Нет, я этот вопрос не освещал. Основная причина, конечно, потому что я не игродел и у меня попросту таких знаний нет. У меня вообще изначально была идея просто показать как настроить среду и написать "Hello, World!" без процедур ПЗУ. Но когда увидел некоторый интерес со стороны зрителей, решил двинуться чуть дальше, а потом ещё и т.д.
Ну а что касается того, о чём я рассказываю, то я-то как раз по сути и описываю движок Sanchez'а! Как-то давно в разговоре он упомянул (когда это ещё не было широко известно), что для своих игр он вначале пишет прототип на C#, а графику в прототипе отрисовывает, записывая данные сразу в битмап. Мне это показалось очень интересным и я на Python сделал нечто вроде виртуального Спектрума со стандартной структурой Спектрумовского экрана, для которого можно писать на Python. А потом под это дело на Python решил сделать движок, чтобы потом перенести его на Спектрум, как это делал Sanchez. И так как у меня не было опыта создания спрайтовых игр, я начал одолевать Sanchez'а вопросами: "А как ты сделал то?", "А как ты реализовал это?". И Саша терпеливо на пальцах начал рассказывать мне как работает его движок, как он хранит карту, как анимирует тайлы, как выводит спрайты, как их сдвигает, а при необходимости ещё и разворачивает. Ко всему этому он шел постепенно, а мне просто выдал уже готовый результат. Например, когда-то ранее он мне рассказывал, как jerri на страницах этого форума подсказал ему крутую идею про вывод спрайта с маской по OR/XOR. Для меня это тогда вообще было тёмным лесом. Даже потом нашёл то сообщение на форуме, но всё равно ничего не понял. А вот когда я уже начал сам реализовывать печать спрайтов, то реально поразился красоте решения. Вот так по описаниям Sanchez'а я и написал по сути его движок на Python, обильно снабдив для себя комментариями. А сейчас я просто перекладываю его с Python на ассемблер, как и планировал ранее, только уже не для Спектрума и Z80, а для Специалиста и i8080. И, соответственно, сталкиваюсь с ограничениями в виде меньшего набора регистров у процессора, и отсутствия возможности синхронизировать вывод на экран. С последним у меня сейчас на Специалисте вообще проблема - анимированный спрайт героя сильно мерцает при восстановлении фона под ним. На Специалисте нужно делать дополнительный промежуточный буфер, что усложняет программу и понимание её работы. Я пока не реализовал это и вообще не уверен, что это легко позволит избавиться от мерцания. Хотя помочь, конечно, должно, потому что именно так сделано в Batty, в там на Специалисте уже ничего не мерцает. А вот на Спектруме нужно просто подгадать правильное по времени начало отрисовки без всяких лишних буферов и дополнительных процедур.
Последний раз редактировалось CityAceE; 08.02.2024 в 09:22.
С уважением, Станислав.
А чем она выгоднее метода AND/OR? При этом, во втором виде спрайты хранятся в прямом виде.
- - - Добавлено - - -
XOR используется в играх типа Lode Runner, чтобы повторным XOR по старым координатам восстановить оригинальную графику. Но если ты используешь маску, то ты явно портишь фон, отсюда и мой вопрос.
Промежуточный буфер точно поможет. Другое дело, что организовать этот буфер можно разными способами и тут как раз помог бы пример спековских движков.
OR+XOR выгоднее AND+(X)OR если для сдвига маски используется dad h. При этом "новые" крайние биты будут нулевые, а при сдвиге маски варианта AND+(X)OR они д.б. единичные.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)