User Tag List

Показано с 1 по 10 из 667

Тема: Разработка ZXOOM

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    смотри разбирай спрашивай
    спасибо. Завтра буду смотреть.
    Насчет еще более быстрого вывода сцены думал.
    Можно подумать над тем, чтобы хранить в спрайтах не координаты знакоместа, а сразу адрес вывода на экране первого байта знакоместа. Тогда не нужно каждый раз его высчитывать. Правда, в этих же двух байтах я храню параметр - краевое это знакоместо спрайта или нет, и если краевое, то какое - правое или левое. Можно как-то это продумать, чтобы вместе с адресом хранить (можно не адрес, а хотя бы смещение от какого-то адреса, например, начала экрана, тогда два бита будут по-прежнему свободны для краевых параметров).
    Еще думал, хранить "слои" экрана - у меня 7 уровней вглубь, следовательно, 7 слоев для перспективы 90 градусов и 7 слоев для перспективы 45 градусов. Причем не весь экран, а только четверть, т.к. остальные 3/4 можно получать отзеркаливанием. В слое хранятся для каждого знакоместа байты изображения каждого элемента (15 элементов - стены, колонны, бассейны, трупы, фазы врагов и т.д.). Т.е. спрайты вообще не нужны, а всё хранится в этих слоях, которые быстро можно вывести. Но всё это занимает в памяти очень много места, пока не придумал, как сократить размер.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,867
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    311
    Поблагодарили
    235 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    спасибо. Завтра буду смотреть.
    Насчет еще более быстрого вывода сцены думал.
    Можно подумать над тем, чтобы хранить в спрайтах не координаты знакоместа, а сразу адрес вывода на экране первого байта знакоместа. Тогда не нужно каждый раз его высчитывать. Правда, в этих же двух байтах я храню параметр - краевое это знакоместо спрайта или нет, и если краевое, то какое - правое или левое. Можно как-то это продумать, чтобы вместе с адресом хранить (можно не адрес, а хотя бы смещение от какого-то адреса, например, начала экрана, тогда два бита будут по-прежнему свободны для краевых параметров).
    Еще думал, хранить "слои" экрана - у меня 7 уровней вглубь, следовательно, 7 слоев для перспективы 90 градусов и 7 слоев для перспективы 45 градусов. Причем не весь экран, а только четверть, т.к. остальные 3/4 можно получать отзеркаливанием. В слое хранятся для каждого знакоместа байты изображения каждого элемента (15 элементов - стены, колонны, бассейны, трупы, фазы врагов и т.д.). Т.е. спрайты вообще не нужны, а всё хранится в этих слоях, которые быстро можно вывести. Но всё это занимает в памяти очень много места, пока не придумал, как сократить размер.
    есть еще вариант отрисовки

    1 как сделано у тебя
    есть теневой экран 6912 байт

    сначала ты делаешь расчеты, потом рисуешь, потом копируешь на экран - это долго

    2 как можно сделать
    сделать таблицу 3072 байта
    сделать таблицу 768 байт под атрибуты
    где 2 байта обработчик знакоместа
    вторые 2 байта - адрес символа

    также у тебя на экране имеется довольно много пустых мест
    и рисовать в них - довольно расточительно по тактам
    Код:
      итак обработчик
    
    обработка пустого места
    empty_char
                  pop af //снимаем ненужный адрес
                  exx
                  ldi       //красим экран - естественно в этом месте атрибуты должны быть #00
                  exx 
                  ret      //переходим на следующий элемент
    draw_char //обычная отрисовка изображения
                  pop hl //снимаем адрес чара
                  ld (draw_c0),sp
                  ld sp,hl
                  ld l,e
                  ld a,d
                  and #f8
                  ld h,a
                  
                  dup 3
                  pop bc
                  ld (hl),c
                  inc h
                  ld (hl),b
                  inc h
                  edup
                  pop bc
                  ld (hl),c
                  inc h
                  ld (hl),b
                  ex de,hl
                  exx
                  ldi
                  exx
                  ld sp,$
    draw_c0 equ $-2
                  inc e
                  ret nz
                  ld a,d
                  add a,8
                  ld d,a
                  ret
    draw_charfv //отрисовка перевернутого по вертикали изображения
                  pop hl //снимаем адрес чара
                  ld (draw_c1),sp
                  ld sp,hl
                  ld l,e
                  ld a,d
                  or #07
                  ld h,a
                  
                  dup 3
                  pop bc
                  ld (hl),c
                  dec h
                  ld (hl),b
                  dec h
                  edup
                  pop bc
                   ld (hl),c
                   dec h
                   ld (hl),b
                  ex de,hl
                  exx
                  ldi
                  exx
                  ld sp,$
    draw_c1 equ $-2
                  inc e
                  ret nz
                  ld a,d
                  add a,8
                  ld d,a
                  ret
    как заполнять эту таблицу?

    для начала распушаем
    нулевой адрес и обработчик нулевых чаров
    в область атрибутов заливаем #00

    далее при прорисовке добавляем в область атрибутов цвет тайла
    а в область обработчика адрес рисовалки и адрес тайла

    т.е получается чтото вроде

    dw empty_char,0,empty_char,0,empty_char,0,empty_char, 0
    dw draw_char,#8000,draw_char,#8008,draw_char,#8010,dr aw_char,#8018

    и в файле атрибутов

    db 0,0,0,0,1,1,1,1

    как то так

    основная тема понятна?
    дальше рассказывать как делать прорисовку с маской?
    С уважением,
    Jerri / Red Triangle.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Разработка клавиатуры для ZX.
    от ZXFanat в разделе ZX Концепции
    Ответов: 171
    Последнее: 13.02.2013, 10:24
  2. Разработка БК-0101-10
    от CodeMaster в разделе БК-0010/0011
    Ответов: 61
    Последнее: 21.04.2011, 21:13
  3. Разработка НОВОГО клона
    от MegaMyth в разделе Несортированное железо
    Ответов: 311
    Последнее: 01.08.2008, 21:52
  4. Методическая разработка. Выпуск.1
    от Ne01eX в разделе Пресса
    Ответов: 7
    Последнее: 06.09.2005, 14:32

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •