Я уже не вспомню сейчас. Возможно, из-за удобства сдвига по горизонтали или ещё чего-то. Но тогда я точно оценил красоту решения. Пока же действительно ничем не лучше, и даже хуже - нужно инвертировать сам спрайт.
Вид для печати
Санчез самоустранилася с форума, но, возможно, @jerri вспомнит в чём профит.
Промежуточный буфер точно поможет. Другое дело, что организовать этот буфер можно разными способами и тут как раз помог бы пример спековских движков.
OR+XOR выгоднее AND+(X)OR если для сдвига маски используется dad h. При этом "новые" крайние биты будут нулевые, а при сдвиге маски варианта AND+(X)OR они д.б. единичные.
Вот это я и хотел услышать. Действительно, маска для XOR выгоднее для сдвига влево, чем маска для AND. Спасибо.
Основной профит OR/XOR- если скроллим влево например спрайт шириной 16 точек
то удобно использовать add hl hl rla и спрайт будет в AHL
также если скроллить через таблицу, то одну и туже таблицу можно использовать для спрайта и маски.
- - - Добавлено - - -
я предлагаю делать частичную буферизацию изображения.
Перемещаем спрайт с помощью клавиатуры:
https://youtu.be/eQe1Uf5TSvw
Восстанавливаем фон под спрайтом и анимируем сам спрайт:
https://youtu.be/pQJ7o1Zgdxw
Спрайт ожидаемо мерцает. Нужно делать дополнительный буфер, в котором готовить бутерброд из фона и спрайта и потом целиком рисовать его на экране. А перед этим нужно будет локально запретить восстанавливать анимацию, если она есть в этом месте. Всё это сильно усложняет логику и понимание. Может что-то предложите попроще?
Я не вижу простых решений без полноэкранного бэкбуфера к сожалению.