User Tag List

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

Тема: Синхронизация в нижней части экрана

Древовидный режим

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

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

    По умолчанию Синхронизация в нижней части экрана

    Спустя 30 лет после молодости решил под ностальгическим настроением намалевать игрулю под Спектрум. Пишу на АСМе в SpectnetIDE под Visual Studio. Штука исключительная, очень нравится.Хочу сделать XONIX. Нолики (враги) будут кубики из 4 пикселов, рутину рисования написал сам (т.к. готовые граф движки с первого взгляда сложны и громоздки, а спрайты мне в принципе не нужны). Программеры знают, что экран надо обновлять когда он не отрисовывается. Обратный луч отлавливаем через HALT. Сейчас пришел к такому алгориту:

    while (1) {
    HALT (начался обратный ход луча)
    Рисуем врагов
    Задержка (цикл)
    Разные задачи (чтение клавы, перемещение игрока итд)
    Удаляем врагов
    Перемещаем координаты врагов
    }

    Схема эта работает, всё летает плавно на 50 Гц до 7 врагов (пока), проблема только в том, что подпрограмма рисования врагов выполняется разное кол-во циклов в зависимости от кол-ва врагов, и вся остальная часть программы сдвигается. Также и Разные задачи занимают разное время в зависимости от действий игрока. В принципе, это можно компенсировать табличной подстройкой задержки, но моя цель,что задержка должна автоматически заканчиваться когда луч начинает рисовать бордюр в нижней части экрана. Иными словами, мне нужно задержкой автоматически охватить всю видимую часть экрана, исключая бордюр. Но команда HALT наступает позже (когда бордюр полностью нарисован). Если ставить задержку сразу после HALT и дотягивать её до низа экрана, теряется добрая половина хорошего времени обратного хода когда я мог бы рисовать.

    Поэтому вопрос такой: чем засинхронизироваться в нижней части экрана где начинается нижний бордюр? Нашёл в инете описание способа floating bus (никогда раньше о нем не слышал. Вкратце суть: если читать из несуществующего порта (например #FF), можно получить байты данных, которые "видеокарта" в данный момент выводит на экран. Описание вот http://sky.relative-path.com/zx/floating_bus.html), это конечно очень круто, но большие проблемы с совместимостью: на разных спектрумах работает по-разному, в эмуляторах тоже не очень корректно либо не работает совсем. Живой синклер 48к у меня есть, но пока руки не дошли его запустить (куплен на Ebay с неисправностью, повозиться с ним надо). Да и загружать постоянно на спектрум конечно долго и неудобно.

    Может кто сталкивался с такой проблемой и знает её корректное решение?
    Последний раз редактировалось Jimmy Falcon; 19.04.2020 в 17:12.

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

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

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

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

Похожие темы

  1. Отсутствует синхронизация
    от Narick в разделе Изображение
    Ответов: 7
    Последнее: 28.01.2018, 22:16
  2. Pentagon 128 - кадровая синхронизация
    от doc_fbi в разделе Pentagon
    Ответов: 5
    Последнее: 27.10.2013, 10:29
  3. Синхронизация изображения с телевизором.
    от Иван Азаров в разделе Для начинающих
    Ответов: 6
    Последнее: 12.09.2012, 18:44
  4. Синхронизация Z80
    от Арнольд в разделе Для начинающих
    Ответов: 8
    Последнее: 12.05.2012, 23:02

Ваши права

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