Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 26

Тема: Вопрос о тайловых картах

  1. #1
    Member Аватар для rjhaviy
    Регистрация
    06.02.2009
    Адрес
    Москва
    Сообщений
    31
    Благодарностей: 1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Вопрос о тайловых картах

    Привет всем кодерам спектурмистам.
    У меня есть несколько глупых вопросов:
    Код:
    GETILE:
            macro ts
            add   a,a
            ld    l,a
            ld    h,ts>>8
            ld    sp,hl
            pop   hl
            ld    sp,hl
            emacro
    ;GTILE
    
    BLTILE:
            macro nxt
            dup   15
            pop   bc
            ld    (hl),c
            inc   l
            ld    (hl),b
            add   hl,de
            edup
    
            pop   bc
            ld    (hl),c
            inc   l
            ld    (hl),b
            ld    bc,nxt
            add   hl,bc
            emacro
    ;BLTILE
    
    BLTMAP:
            proc
            ld   (@SAVSP),sp
            ld   hl,(MAPBY-1)
            ld   l,0; Y*128
            srl  h
            rr   l
            ld   de,MAPBUF
            add  hl,de
            ld   de,(MAPBX)
            add  hl,de; +X
            ex   de,hl
    
            ld   bc,#0a71   ; b = map height, c = map width - 16
    
            exx
            ld   hl,BSADDR  ; back screen address
            ld   de,BSWDTH-1; back screen width -1
            exx
    
    @LOOP:
            dup  15
            ld   a,(de)
            inc  e
            GETILE TILSET; tile table address
    
            exx
            BLTILE -479
            exx
            edup
            ld   a,(de)
            GETILE TILSET
            exx
            BLTILE 1
            exx
    
            ld   a,e
            add  a,c
            ld   e,a
            jr   nc,$+3
            inc  d
            dec  b
            jp   nz,@LOOP
    
    @SAVSP: equ $+1
            ld   sp,-1
            ret
            eproc
    ;BLTMAP
    Слегка модифицированный код из CJ Antics Elephant
    Карта там массив 128x20

    А вопрос следующий:

    Если кто помнит, то в CJ Antics слоненок находится по середине,
    но как только достигает одного из краев, карта скроллируется возвращая его обратно на середину.
    Как лучше организовать
    игровой цикл? рисовать карту всегда (более 100 000T на прорисовку)
    или рисуем один раз, а потом обновляем по мере необходимости, т.е. если нужен скролл, но фон под спрайтами нужно будет сохранять..
    Например в Stormlord скролл постоянный, но и карта там рисуется подругому...
    Последний раз редактировалось rjhaviy; 21.02.2009 в 05:30.

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

  3. #2
    Banned Аватар для psndcj
    Регистрация
    22.02.2005
    Адрес
    triebkraft
    Сообщений
    712
    Благодарностей: 30
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    рисовать карту постоянно полностью имеет смысл при большом количестве движущихся по ней спрайтов (когда затраты на запоминание и восстановление фона становятся больше, чем время рисование карты), либо при анимированных тайлах карты. если игра типа CJ Antics - то действительно проще под этими 2-3 спрайтами фон запомнить.

  4. #3
    Member Аватар для rjhaviy
    Регистрация
    06.02.2009
    Адрес
    Москва
    Сообщений
    31
    Благодарностей: 1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psndcj Посмотреть сообщение
    рисовать карту постоянно полностью имеет смысл при большом количестве движущихся по ней спрайтов (когда затраты на запоминание и восстановление фона становятся больше, чем время рисование карты), либо при анимированных тайлах карты. если игра типа CJ Antics - то действительно проще под этими 2-3 спрайтами фон запомнить.
    Спасибо!
    Я тут поизучал код Stormlord и понял что там карта рисуется постоянно,причем тоже не очень быстро, а попиксельный скролл (вернее 2-х пиксельный) реализован четырьмя наборами "декранченых" тайлов и хитрым их рисованием (если интересно: #8cda).
    Вобщем думаю....

  5. #4
    Member Аватар для rjhaviy
    Регистрация
    06.02.2009
    Адрес
    Москва
    Сообщений
    31
    Благодарностей: 1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня еще один вопрос: как лучше всего представить анимированные тайлы? в смысле, наверное обычным индексом уже не обойтись???

  6. #5
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,031
    Благодарностей: 1426
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от rjhaviy Посмотреть сообщение
    У меня еще один вопрос: как лучше всего представить анимированные тайлы? в смысле, наверное обычным индексом уже не обойтись???
    Да запросто. Только теперь каждый индекс будет пересчитываться в определенном диапазоне.

    Например, тайлы воды занимают индексы 16-19 (4 кадра), тогда процедура пересчета индекса будет примерно:
    Код:
    ;a- old index
    ;c- mask
      ld b,a
      inc a
      xor b
      and c
      xor b
    для вышеуказанного примера c=3

  7. #6
    Banned Аватар для psndcj
    Регистрация
    22.02.2005
    Адрес
    triebkraft
    Сообщений
    712
    Благодарностей: 30
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ну я пробовал 2 варианта - либо каждый кадр менять саму графику тайлов, либо есть процедура, которая подставляет номер нужного тайла в анимацию... млин, непонятно вышло =)

    1 вариант - карта 1 2 3 4 5 - тайлы 1,2 анимированные
    каждый кадр в наборе графики (ну типа шрифта =) меняем графику для этих 2х символов - так сделано к примеру в Boulder Dash

    2 вариант - та же карта, только выглядит 255 254 3 4 5 - 255 и 254 собсно номера анимированных тайлов
    вот - перед выводом на экран вырезаем окно нужных размеров из общей тайловой карты (карта же наверняка больше экрана), и при этом подставляем вместо 255 номер выводимого тайла (то есть существует табличка 255 = (0,1,1,2,3,1,0), в которой для каждой анимашки записан порядок показа тайлов) - для упрощения кода проще всего сгруппировать все анимации в начало или конец индексов.

    первый вариант хорош для случаев, когда анимация редкость, второй в принципе универсален.

    и немного в сторону от вопроса - тайловые карты лучше всего (имхо) рисовать в Mappy (редактор под Win с кучей возможностей). анимация в нем реализуется как раз вторым способом.

  8. #7
    Member Аватар для rjhaviy
    Регистрация
    06.02.2009
    Адрес
    Москва
    Сообщений
    31
    Благодарностей: 1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Круто! Спасибо!

    И еще вопрос:
    "Собираемые предметы", если их очень много, где лучше хранить, в тайловой карте ???
    (их тоже хотелось анимировать)

    Добавлено через 10 минут
    Vitamin, спасибо!
    Последний раз редактировалось rjhaviy; 02.03.2009 в 23:19. Причина: Добавлено сообщение

  9. #8
    Banned Аватар для psndcj
    Регистрация
    22.02.2005
    Адрес
    triebkraft
    Сообщений
    712
    Благодарностей: 30
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ну если их много совсем, как в том же БолдерДаше алмазов - то да (прямо в карте) - а если типа Диззи - то наверно лучше отдельно - печатать спрайты поверх карты уже.

  10. #9
    Member Аватар для rjhaviy
    Регистрация
    06.02.2009
    Адрес
    Москва
    Сообщений
    31
    Благодарностей: 1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    psndcj, спасибо!!!

  11. #10
    Member Аватар для rjhaviy
    Регистрация
    06.02.2009
    Адрес
    Москва
    Сообщений
    31
    Благодарностей: 1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В Stormlord (1) и многих других играх использовался метод вывода графики без "теневого" экрана, сразу в экранную область (#4000-#5aff). Методика следующая:

    1. Обрабатываются спрайты: записываются в спец массив линий.
    2. Рисуется карта: рисуется линия тайлов, если в линию "попадают" спрайты, то
    рисуются они и т.д. обрабатываем каждую линию. Такая методика позволяет рисовать спрайты практически без мерцания. (На некоторых эмулях все же видно)

    У меня, возник вопрос: как происходит отсеивание и сортировка спрайтов в массив линий? Кто нибудь может рассказать о данной методике? И... если можно, поподробней...

Страница 1 из 3 123 ПоследняяПоследняя

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

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

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

Похожие темы

  1. вопрос
    от Sayman в разделе Барахолка (архив)
    Ответов: 10
    Последнее: 20.11.2008, 09:40
  2. Вопрос по IDE
    от Пётр в разделе Внешние накопители
    Ответов: 67
    Последнее: 13.05.2007, 18:40
  3. Вопрос про ПЗУ
    от Eltaron в разделе Память
    Ответов: 14
    Последнее: 25.12.2005, 20:17

Ваши права

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