Цитата Сообщение от svofski Посмотреть сообщение
Нет, маска в Ъ блокирует только затирание. У тебя беда в том, что межфазное затирание может затереть предыдущую фазу. Эта маска как раз не дает этого сделать.

Затиралка маскирует затирание по маске из Ъ.

Рисовалка делает ИЛИ своей маски в Ъ. В остальном она рисуется как раньше. Блендится со всем предыдущим.

Может быть правда можно обойтись просто пометкой блоков 8х8, как говорит jerri, но чего-то я пока не соображу как.
Про первые межфазные кадры понятно что маска будет блокировать. Но как она поможет в первом кадре новой фазы если она будет очищена? Вот это я не пойму.

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

В методе Jerry меня смущает оверхед на установку/восстановление стека, и других параметров спрайта каждый раз для маленького блока 8*8. Но возможно это как-то тоже можно избежать.

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

svofski, твой способ это я так понимаю некое подобие стенсил буфера для стирания спрайтов. в идеале он должен хранить отрисованные в него маски всех присутствующих на экране спрайтов. Но как его готовить корректно (удалять из него то что уже не на экране) не каждый кадр я что-то не вижу.

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

в теории этот стенсил буфер можно готовить каждый кадр для всех спрайтов которые не нужно перерисовать в текущем кадре. Затем для спрайта который нужно отрисовать в текущем кадре удаляется с экрана его старая версия по маске стенсила чтобы не испортить те спрайты которые не нужно перерисовать. Затем на экран рисуется этот спрайт с маской чтобы не запортить уже нарисованные спрайты. Если в текущем кадре нужно обновить ещё один спрайт, то нужно в стенсил буфер нарисовать маску спрайта который на предыдущем шаге отрисовал на экран.

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

Можно попробовать для начала стирать спрайты не блоком как сейчас, а по маске спрайта. С учётом того что спрайты двигаются на 2 пикселя, то по идее глюки где не восстановиливается изображение после стерания будет небольшим.