С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
я так понимаю это адреса в списке^установка на первую строку
^скроллер1 голова
^скроллер1 хвост
^переход растровых строк
^скроллер1 голова
^скроллер1 хвост
^переход растровых строк
^скроллер1 голова
^скроллер1 хвост
^переход растровых строк
^скроллер1 голова
^скроллер1 хвост
^переход тайловой строки
^скроллер2 голова
^скроллер2 хвост
итд
вопрос - как удалить из списка последний обьект ушедший за экран
и как добавить в список новый обьект вышедший из-за экрана?
если можно то кусочек кода пожалста
С уважением,
Jerri / Red Triangle.
Ну что ж, до мин недолеча осталось.
Встроил в печать ландшафта печать буфера спрайтов.
- Подготовка лодки к печати - 1150 тактов
- Печать лодки с проверкой на столкновение - 2700 тактов
- Стирание ксоркой - 1900 тактов
Не стал я лодку урезать до 4 знакомест, сделал 5. Но некоторые байты спрайта пропущены. Печатаю змейкой.
Буду метиться на дискретность в 1 пиксел, а там посмотрим.
Есть 2 нюанса
1. перенеси весь исполняемый код выше #8000
2. чего у тебя весь экран одного цвета?лодка должна быть белая
---------- Post added at 10:30 ---------- Previous post was at 09:45 ----------
ладно
раз уж дошли до момента когда надо рисовать спрайты
вот технология для быстрого сортирования обьектов
итак
создаем таблицу 256 байт (чтоб работать удобнее было)
можно конечно и поболее таблицу создать но это надо смотреть по месту
итак 256 байт
первые 12 байт - счетчики обьектов в строке
последующие 240 байт - данные по обьектам в строках
итак обрабатываем какойто обьект
например мину
в С - номер обьекта
ну или еще какой регистр
ld h,table_object/256
берем координату Y
делим на 16 получаем число 0 до 11
and #f0
rra
rra
rra
rra
ld l,a
inc (hl)
ld a,(hl)
add a,a
add a,(hl)
add a,a
add a,a
//умножаем на 12
add a,l
ld l,a
ld (hl),c //номер обьекта
и теперь обработка обьектов
ld hl,table_object
ld b,12
obj_
ld a,(hl)
берем количество обьектов
or a
jr nz,object_proceed
inc l
djnz obj_
object_proceed
ld b,a количество обьектов
ex de,hl
ld hl,12
add hl,de
hl - список обьектов
переход к следующему обьекту
add hl,12
естественно перед выходом hl восстановить
Другой вариант
в С - номер обьекта
ну или еще какой регистр
ld h,table_object/256
берем координату Y
делим на 32 получаем число 0 до 11
and #e0
ld l,a
inc (hl)
add a,(hl)
ld l,a
ld (hl),c
после отработки получается примерно такая таблица
#8000
#00,#00,#00,....
#8020
#01,#05,.......
#8040
#02,#01,#02,....
т.е строка 1 - координаты Y от 0 до 31 - 0 обьектов
строка 2 - координаты Y от 32 до 63 - 1 обьект ID5
строка 3 - координаты Y от 64 до 93 - 2 обьекта ID1 ID3
зачем это надо
для того чтобы при отрисовке перед лучом нарисовать сначала обьект №5 с координатой 32
а потом уже рисовать №1 с координатой 64 и №3 с координатой 90
ld hl,table_object
ld b,#8
obj_
ld a,(hl)
берем количество обьектов
or a
jr nz,object_proceed
ld a,l
add a,32
ld l,a
djnz obj_
object_proceed
ld b,a количество обьектов
inc l
hl = список обьектов
Последний раз редактировалось jerri; 08.12.2009 в 11:53.
С уважением,
Jerri / Red Triangle.
эт потом. Еще мины должны ведь черные. А они еще и в шахтах. Тут много вариантов:
1) подкрашивать спрайты. Т.е. можно сделать вкл/выкл. режима подкрашивания наподобие "7дней в раю"
2) Мины будут красные пока они не всплывают. Потом- подкрашивать черным, при этом шахта будет вся в квадратиках.
3) Еще много вариантов.
Короче, не знаю я, что же делать с цветами. Надо экспериментировать. Но пока нет мин - не имеет смысла.
ничче не понял.
Зачем сортировать объекты в строке?
Ключ сортировки - это X что ли?
Беглым взглядом - это алгоритм вставок какой-то.
Куда потом применять эту таблицу 256 байт?
Какие данные содержаться в этой таблице?
Что такое 12?
Мне бы лучше алгоритм сортировки (разбивки) объектов по знакострокам и заполнения буфера для последующей печати. Т.е. ключ - Y объекта. А то я сделал лодку - не очень доволен как у меня получилось. Буду скорее всего переделывать.
Последний раз редактировалось ace210; 08.12.2009 в 10:30.
ошибся я там -естественно Y
но есть ограничение - не более 20 обьектов на строку для первого алгоритма
или не более 31 обьекта на строку для второго алгоритма
С уважением,
Jerri / Red Triangle.
Мысли по цветности
Во-первых, предусмотреть ее отключение
черным по синему тоже уже неплохо, взрывами можно помигать,
букафки сверху-снизу цветные - совсем уныло не будет
Во-вторых, прокрутка атрибутов
Можно сдвигать все сразу одновременно, но тогда получится
многовато пустых квадратиков, которые будут зря окрашивать спрайты
С другой стороны, пусть мы не можем двигать атрибут
"с точностью до пикселя", зато можем "с точностью до кадра"
То есть атрибуты смещаем каждый кадр, но не все!
А чтобы лучше совпадали с кромками ландшафта
Здесь какие-то хитрые процедуры не нужны, хватит универсальной
Формат данных в буфере атрибутов (здесь лучше слева направо):
- пропуск до следующего сдвигаемого
- кадр, на котором его нужно сдвинуть
И при прокрутке знаколинии (перед спрайтами) быстро пробегаем
(информацию о кадре сдвига можно к тайлу привязать)
В-третьих, окраска спрайтов
Мины "подкрашивать черным" просто так не нужно, само же получится
Если уж подкрашивать, то в красный и весь спрайт целиком
чтобы цвет потом сменился скачкообразно - так лучше смотрится
А вот лодка, то и дело мигающая красным, уже получится некрасиво
Или можно атрибутный конфликт разрешить простой моргалкой по четности кадра
Что правда усложнит проверку столкновения и стирание, да и дольше будет
С другой стороны, если по скорости есть запас - почему бы нет?
Думаю, сначала лучше добавить неравномерный сдвиг атрибутов, а там видно будет
Прихожу без разрешения, сею смерть и разрушение...
Караул!
Не успел отрисоваться.
Почти в самом конце, где куча шахт подряд. Около 200 тайлов там. Не помогли даже стрип-тайлы.
Последний раз редактировалось ace210; 08.12.2009 в 16:32. Причина: Ошибся. Всего тайлов 200 штук приблизительно.
Короче, всё окно практически рисуется. Из теории помним, что экран на спектруме за прерывание, ну, никак не успеть перебросить.
В этом месте, если хотим сделать 1 фрейм, придется отступить от оригинала.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)