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

User Tag List

Страница 1 из 23 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 234

Тема: Спрайты

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,349
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Спрайты

    КДПВ:

    Нажмите на изображение для увеличения. 

Название:	IMG_20190317_105539.jpg 
Просмотров:	189 
Размер:	21.8 Кб 
ID:	68602

    (Пре-альфа арканоида растет там же, где и тетрис на гитхабе)

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

  3. #2
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,625
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    tnt23, а какое строение экрана у Океана?
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  4. #3
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,349
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    tnt23, а какое строение экрана у Океана?
    256 строк по 512 пикселей в строке в монохромном режиме, и 256 пикселей в строке в цветном режиме. Экран начинается с адреса 4000h и растет с левого верхнего угла вниз до 40FFh, затем следующая колонка 4100h-41ffh и так далее. В монохромном режиме один бит - один пиксель.

    В цветном режиме цвет каждого пикселя задается двумя битами: одним с адреса 4000h (если взять для примера верхний левый угол), а другим с адреса 4100h. Получается, что в цветном режиме есть два цветовых битплана, которые "перемешаны" друг с другом: один битплан занимает адреса 40xxh, 42xxh, 44xxh..., второй занимает адреса 41xxh, 43xxh, ... .

    По поводу рисования спрайтов. Сейчас для будущего Арканоида взята без изменений процедура PaintBitmap из Тетриса, которая просто выводит на экран цветной битмап 8x8 пикселей:
    Код:
    ; *************************************************
    ; PaintBitmap - нарисовать битмап 8х8
    ; HL - адрес битмапа
    ; BC - X и Y
    ; A - биты плоскостей
    ; *************************************************
    В аккумуляторе передаются биты плоскостей, которые нужно нарисовать. Сам битмап кодируется просто: в памяти последовательно идут 8 байт для первого битплана, следом за ними 8 байт для второго битплана. Если установлен бит 0 в аккумуляторе, то выводятся (копируются) байты для первого битплана, для установленного бита 1 - то же для второго битплана.

    Скрытый текст

    Код:
    ; *************************************************
    ; PaintBitmap - нарисовать битмап 8х8
    ; HL - адрес битмапа
    ; BC - X и Y
    ; A - биты плоскостей
    ; *************************************************
    PaintBitmap
            di
            push    bc
            push    de
            
            push    a
            ; Отключаем ПЗУ для доступа к экранному ОЗУ
            mvi     a, ENROM
            out     BANKING
            
            push    hl
            lxi     h, SCREEN
            mov     d, b
            mvi     e, 0
            dad     d       ; hl = SCREEN + X*256
            mvi     d, 0
            mov     e, c
            dad     d       ; hl = hl + Y
            pop     de       ; de = адрес битмапа
    
            pop     a       ; плоскости
            
    Plane1
            rrc
            jnc     Plane2
            call    Copy8
    Plane2        
            rrc
            jnc     PlaneDone
    
            ; Второй план битмапа
            push    h
            lxi     h, 8
            dad     d
            xchg
    
            ; Перейдем ко второму плану экрана
            pop     h
            inr     h
            call    Copy8
    
    PlaneDone
            ; Включаем ПЗУ обратно
            xra     a
            out     BANKING
            
            pop     de
            pop     bc
            ei
            ret
    
    Copy8
            push    h
            push    d
            push    a
            mvi     c, 8
    PBLoop  ldax    d
            mov     m, a
            inx     d
            inx     h
            dcr     c
            jnz     PBLoop
            pop     a
            pop     d
            pop     h
            ret
    [свернуть]



    PaintBitmap, как всякая сделанная на коленке процедура, проста и вместе с тем далека от эффективности. По уму ее бы переделать хотя бы на работу со стеком для быстрого копирования в экранную память, но это не главная проблема. Что было хорошо для Тетриса, уже мало подходит для Арканоида с необходимостью ловли коллизий нескольких спрайтов, причем по возможности на пиксельном уровне.
    Последний раз редактировалось tnt23; 31.03.2019 в 16:53.

  5. #4
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    4,231
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tnt23 Посмотреть сообщение
    Экран начинается с адреса 4000h
    С 4000h он в основном для пзушных процедур начинается, игрушкам работающим в озу имхо удобнее использовать экран с 0C000h (сам я в океанских программках только такой вариант и использовал).

  6. #5
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,349
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    С 4000h он в основном для пзушных процедур начинается, игрушкам работающим в озу имхо удобнее использовать экран с 0C000h (сам я в океанских программках только такой вариант и использовал).
    Да, это я перепутал. Экранное ОЗУ находится по адресу 0C000h, конечно.

  7. #6
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    2,856
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    3 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    почитал тему и...

    Цитата Сообщение от tnt23 Посмотреть сообщение
    Что было хорошо для Тетриса, уже мало подходит для Арканоида с необходимостью ловли коллизий нескольких спрайтов, причем по возможности на пиксельном уровне.
    что вы хотите сталкивать на пиксельном уровне
    и главное зачем?.

    не сдержался
    сильно все на никаком уровне...

  8. #7
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,349
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    что вы хотите сталкивать на пиксельном уровне
    и главное зачем?.
    Например: мячик круглый, кирпичи угловатые. Есть траектории, в которых мячик проходит опасно близко к острому кирпичному углу, но это не коллизия.

    - - - Добавлено - - -

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    из этого вопрос по океану
    что происходит при подключении экранного озу
    что нужно выключать его потом обратно
    (во львове, например, это обусловлено отпаданием 16К памяти)
    Сорцы тут - https://github.com/timtashpulatov/ok...master/ark.asm

    ПЗУ обратно включается, чтобы пользоваться штатной процедурой опроса клавиатуры.

  9. #8
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    2,856
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    3 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tnt23 Посмотреть сообщение
    Например: мячик круглый, кирпичи угловатые. Есть траектории, в которых мячик проходит опасно близко к острому кирпичному углу, но это не коллизия.
    и этим вы неимоверно усложняете движок и замедляете его
    мячик можно описать 4-мя 6-ю точками
    проще сделать кирпич строго прямоугольным
    закруглением в один пиксель принебречь

    кирпичи не распологаются попиксельно
    а обычно по сетки 8х8
    из чего можно неимоверно все упростить и оптимизировать
    и проверять столкновение с кирпичами простым
    cp (hl)
    jp nz,collision
    на каждый шаг шарика

    и сразу при этом читать номер кирпича
    (250 кирпичей(больше низя) на экране с головой хватит)

    - - - Добавлено - - -

    ПЗУ обратно включается, чтобы пользоваться штатной процедурой опроса клавиатуры.
    забудтье про ПЗУ навсегда
    пишите свою процедуру опроса

    - - - Добавлено - - -

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    из чего можно неимоверно все упростить и оптимизировать
    и проверять столкновение с кирпичами простым
    я говорю про попиксельное перемещение мячика
    и полет его под любыми углами не кратными 45 градусам
    Последний раз редактировалось NEO SPECTRUMAN; 14.04.2019 в 19:26.

  10. #9
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    2,766
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tnt23 Посмотреть сообщение
    Есть траектории, в которых мячик проходит опасно близко к острому кирпичному углу, но это не коллизия.
    Можно держать вспомогательный битмап небитых кирпичей (по биту или два на кирпич) и битмап мячика, по биту на мячик. Первичный тест будет очень быстрый.
    Больше игр нет

  11. #10
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,349
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    По мотивам обсуждения с ivagor переделал простой вывод мячика на более сложный, буферно-слоёный. Теперь мячик рисуется не прямиком на экран, а в отдельный буфер 8x16 пикселей:

    • сначала в буфер рисуется фон. Пока он исключительно черный, но в перспективе ничто не мешает вместо нулей подложить изображение размером с игровое поле или вообще во весь экран;
    • затем в буфер отрисовываются кирпичи из ближайших к мячику окрестностей;
    • затем в буфер отрисовываются несуществующие пока спрайты несуществующих еще врагов;
    • и апофеозом по OR туда лепится мячик. Я уже морально созрел добавить маску мячика (в виде множества фаз) и лепить его в буфер по AND маски и OR спрайта.


    Полученный бутерброд уже отдается битблиту для вывода на экран. В светлом недалеком будущем это, конечно же, будет делаться с оглядкой на положение луча.

    Название: ball_sprite.png
Просмотров: 386

Размер: 679 байт

    Сейчас все это довольно громоздко, изобилует копипастой, и к тому же изотропно анизотропно (работает хорошо, когда мячик летит вправо, и хуже, если влево). Также вызывает изжогу нагромождение кода по определению, какие части каких кирпичей когда отрисовывать, и какие кирпичи выбивать при разных положениях мячика.
    Вопрос времени.
    Последний раз редактировалось tnt23; 08.04.2019 в 10:41. Причина: Пособие по укладке парашюта. Издание второе, исправленное.

Страница 1 из 23 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Как вырезать спрайты
    от Bedazzle в разделе Графика
    Ответов: 20
    Последнее: 09.02.2019, 22:27
  2. dehrust и спрайты
    от drbars в разделе Программирование
    Ответов: 21
    Последнее: 15.01.2013, 16:51
  3. Спрайты из бейсика
    от Руслан в разделе Графика
    Ответов: 15
    Последнее: 26.07.2012, 19:54
  4. Спрайты в бейсике
    от AER в разделе Для начинающих
    Ответов: 13
    Последнее: 28.03.2010, 11:50
  5. Спрайты из игр
    от newart в разделе Графика
    Ответов: 14
    Последнее: 16.07.2009, 21:07

Ваши права

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