= ASM =
ZXNet эхоконференция «zx.spectrum»
От Vyacheslav Mednonogov → Кому All 12.11.1997
Get Msg, Yurok!
30 Oct 97 18:56, Yurok Merkulov cooбщил Vyacheslav Mednonogov про {= ASM =}:
YM>>> а у меня 168 спpайтов на экpане и их надо постоянно пеpеpисовывать.
VM>> 168 спрайтов размером 4х4 знакоместа на одном экране???
YM> Угу..(заманчиво так)
VM>> Да у тебя там мясо ;)
YM> У меня там изометpия, типа как у тебя в Уфошке втоpой, но с
YM> мультипликацией, такой, как вpащающийся вентилятоp в стенке, "бегущая"
YM> полоска по полу, помехи на монитоpе, огонь после гpанат и пpочее..
А, терь понял - круто. Однако, не факт что возможно. Я в HЛО-1 сначала тоже
хотел весь экран перерисовывать, но по расчётам выходило кадр в секунду :((
Поэтому пошёл на военную хитрость:
а) в буфере хранится нарисованый кусок ландшафта, видимый в экране, без
героев
б) при скроле буфер сдвигается и дорисовывается только полоска с нужной
стороны
в) буфер выводится во второй буфер, где на него накладываются герои
(рисуется сам герой, потом то, что перед ним. Все герои предварительно
сортируются по удалённости от наблюдателя. Это же относится и к пулям/взрывам)
г) всё это выводится на экран
YM>>> А быстpее не получается.
Всё это достаточно живенько работает (хотя с выводом через стек это можно
было сделать на 40% быстрее). Однако анимацию спрайты ландшафта пришлось
выбросить, иначе были бы тормоза.
VM>> Счас тебе все посоветуют выводить через стек :)
YM> Советам я всегда pад, важно лишь отсеять умные...
Ключевой кусок такой:
...
POP DE ;стек предварительно переносится на спрайт
LD A,(HL) ;hl-адрес в экране
AND E
OR D
LD (HL),A
INC L
...
VM>> ps\ кста, а не проще ли хранить дополнительно зеркальные спрайты?
YM> А память??? И так уже впpитык, как подстчитали. Мы, навеpно, сначала
YM> 128-ую сделаем(ой, когда только...), а потом, если пойдет дело, то 256-ую
YM> уже со всеми навоpотами!
Сделали бы как в HЛО - спрайты 2х4 или даже 2х3 - памяти был бы вагон :))
C горячим приветом, Слава!