Draw Flush
Буфер команд у процессора не резиновый: 256 за раз, а всё лишнее пропадает молча
drawflush — ровно то же, что printflush, только для картинки: отдаёт дисплею всё,
что накопил draw, и чистит буфер в любом случае — не тот блок, снесённый блок, вообще
не дисплей, разницы нет.
Команд за раз не больше 256
Заголовок раздела «Команд за раз не больше 256»Программа рисует сетку 16 на 16 — ровно 256 клеток, дисплей занят целиком. Нажмите «пуск» и посмотрите в правый верхний угол: двух клеток не хватает.
Мест в буфере тоже 256, но два из них уже заняты: clear и color — такие же команды,
как и все прочие. Клеток поэтому нарисовано 254, и в переменной команд видно ровно это
число мест, дошедших до дисплея.
Считать нужно все команды, а не только фигуры: clear, color, stroke и преобразования
занимают места наравне с ними — в примере выше именно из-за них пропали две клетки. И надпись занимает столько мест, сколько в ней символов —
каждая буква отдельной командой.
Отдавать можно не всё сразу
Заголовок раздела «Отдавать можно не всё сразу»Буфер чистится после каждого drawflush, значит рисунок легко разбить:
draw clear 20 20 30# …первые двести команд…drawflush display1# …следующие двести…drawflush display1Дисплей помнит нарисованное, поэтому вторая пачка ложится поверх первой, а не вместо неё. Единственное, чего так не сделать, — показать всё одновременно: между двумя отправками проходит время, и на быстром рисунке это видно.
Несколько дисплеев
Заголовок раздела «Несколько дисплеев»У буфера нет адреса: он один на процессор, и до drawflush неизвестно, кому его отдадут.
Поэтому с двумя дисплеями порядок такой: нарисовали для первого — отдали первому, нарисовали
для второго — отдали второму.
Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.