раз ты спрайты по очереди рисуешь может все таки метод поспрайтовой рисовки?
ну когда выбирается сектор с нахлестом вокруг спрайта и все что там есть рисуется
Вид для печати
Ага. С памятью под спрайты проблем нет. Сейчас распределение пока такое:
Банк0_0000-7ffff - спрайты героя и половины врагов.
Банк0_8000-ffff - тайлы уровня
Банк1_A000-dfff - текущий клип.
Еще много банок свободных.
Спрайты со сдвигом на 2+маска
- - - Добавлено - - -
Ага, не идеальное решение. Но если я правильно понимаю твой способ то там может произойти тоже самое.
Кстати способ рисовать спрайты не за один кадр я решил из-за скорости отрисовки. Не хватает у меня времени на всех.
- - - Добавлено - - -
jerri, на отрисовку всего за один кадр у меня не хватает времени кадра. Но возможно стоит покопать в эту сторону если с горизонтальными секторами не взлетит.
Если ты не запрещаешь прерывания, то что значит "не хватает времени на всех"?
svofski, да, я не запрещаю. но я стараюсь уложиться в кадр чтобы пониматься где у меня луч бежит и обходить его. Возможно я не понял твою идею.
- - - Добавлено - - -
к сожалению у меня не получается уложится в 25 fps при отрисовке всех спрайтов. сейчас основная масса спрайтов (скелеты) рисуется 12.5fps. кадый спрайт рисуется в 3 плоскости с маской.
Я к тому, что может быть просто рисовать как рисуется и все, не думать пока о мелочах. Нормально обогнать луч тяжело. Ты еще устанешь от этого, а потом переделаешь что-то в игре и все придется заново придумывать.
Meanwhile, такая безумная идея -- что если пожертвовать 8К для слоя маски? На самом деле меньше, потому что не весь экран ведь задействован. Жирно конечно, но открываются дополнительные возможностипятачка
Назовем его слой Ъ. Вначалѣ Ъ пустъ.
Кадр 1.
Затираем группу спрайтов 1 в предыдущей позиции. Затираем только те биты, которые не установлены на соответствующем месте в слое Ъ (в первом кадре это все биты)
Рисуем группу спрайтов 1 в новой позиции и OR-им маску в слой Ъ.
Кадр 2.
Затираем группу спрайтов 2 в предыдущей позиции. Затираем только те биты, которые не установлены на соотв. месте в слое Ъ (тут мы обходим стороной то, что было отрисовано в первом кадре)
Рисуем группу спрайтов 2 в новой позиции и OR-им маску в слой Ъ.
... так продолжается столько, сколько предусмотрено промежуточных фаз ...
Кадр X межфазный. Чистим слой Ъ и все начинается сначала.
jerri, скорость привязана к прерываниям. Если апдейт+ draw не уложились в кадр, то в следующий раз апдейт выполнится столько раз сколько прошло прерываний с прошлого раза.
Интересно. Если я правильно понимаю, то если чистить слой ъ целиком, то спрайты в кадрах 2,3 и остальных межфазных кадрах потеряют возможность быть корректно сбленджеными так как при новой фазе могут быть стёрты. Или я что-то упустил?
- - - Добавлено - - -
В прерывании держать апдейт для меня означает что я не смогу ничего нарисовать когда луч вверху экрана в области бордюра.
Сейчас обработчик выполняется в середине кадра. В начале кадра рисуется то что в нижних позициях, а после апдейта рисуется то что нужно в верхних позициях. Таким образом я избавляюсь от пересечения с лучем.
- - - Добавлено - - -
По поводу моего метода разделения области отрисовки на 4 вертикальные области.
svofski, да, ты прав что спрайты могут скучковаться в одной области. Но для меня будет ок такие случаи имхо. На msx и nes тоже есть подобное ограничение. Спрайты начинают моргать. Если не получится это излечить, то думаю это ок.