Пулевой дизайн внешнего алгоритма

внешний интерфейс алгоритм GitHub JavaScript
Пулевой дизайн внешнего алгоритма

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

Рисунок 1.1 Барраж-эффект

Перед открытием сначала опишем сложность разработки заграждения, а затем сосредоточимся на описании идеи построения алгоритма.

  • Как сделать так, чтобы экраны маркеров с разными размерами шрифта не сталкивались
  • Расчет положения экрана пули
  • Управление скоростью заградительного огня и реализация анимации
  • Заграждение и синхронизация видео

Как сделать так, чтобы экраны маркеров с разными размерами шрифта не сталкивались

Если на экране маркеров используется тот же размер шрифта, проблема коллизии решается относительно просто: ее можно вычислить, только учитывая скорость воспроизведения и положение смещения соседнего экрана маркеров. Однако с экранами маркированного списка с разным размером шрифта очень сложно иметь дело.Начальная позиция экрана маркированного списка не может быть увеличена линейно.Например, если субтитры размещены в первой строке, следующие субтитры могут быть размещены в порядок сверху вниз.

Расчет положения экрана пули

Столкновение только с хорошей конструкцией заграждения в исходном положении может быть только динамичным и эффективным управлением заграждением разного размера. Аналогия, мы получили шквал данных через интерфейс в течение 2 сек., 1000, у каждого субтитра длина, скорость, размер разные, как управлять шквалом, схематическая диаграмма выглядит следующим образом:

Рисунок 2.1 Схематическая диаграмма управления пулевым экраном

Это первый случай, после размещения их по порядку сверху вниз будет несколько проблем:

  1. Как рассчитать положение экрана пули пять, шесть и семь и циклировать по модулю + накопление в соответствии с верхним значением?
  2. Когда заграждение 1 или заграждение 3 достаточно длинные, как вовремя пропустить расчет текущей позиции?
  3. Как использовать освободившуюся позицию при пересчете экрана пули воспроизведение текущего экрана окончено
  4. Соответствует ли освободившаяся позиция высоте текущего заграждения
  5. ...

Ряд проблем не будет перечисляться.Основываясь на этом фоне, мы объединили метод мышления математического моделирования, чтобы найти работу аэропорта с очень высоким сходством в сцене заградительного огня. Мы можем думать о заграждении как о самолете.Та же причина, по которой количество заграждений разыгрывается в каждый период времени, совпадает с тем, сколько самолетов выпускает аэропорт в каждый период времени.

Столичный международный аэропорт имеет в общей сложности 3 взлетно-посадочные полосы, две взлетно-посадочные полосы класса 4E и одну взлетно-посадочную полосу класса 4F, с пропускной способностью 90 миллионов пассажиров в 2016 году. Его рабочий механизм заключается в том, что все самолеты используют 3 взлетно-посадочные полосы для выполнения транспортной задачи.

Таким же образом мы также спроектировали несколько ролей: одна гусеничная (ВПП), одна диспетчерская (вышка), а третья барражирующая (самолет).Для каждой роли мы проектируем класс и делим его на Трек, Основной, Пуля.

  • отслеживать

    Роль трека очень важна, он может решить проблему расчета положения экрана пули, контроля скорости и обнаружения столкновений.

    Во-первых, нам нужно инициализировать дорожку. С точки зрения непрофессионала, сколько взлетно-посадочных полос мы собираемся построить?Мы не физические объекты.Мы можем динамически регулировать количество путей.Принцип расчета следующий:

      轨道数量 = 播放器有效高度 / 设备基准字号
          * 播放器有效高度:播放器的实际高度减去控制条的高度,因为弹幕不可以遮挡控制条。
          * 设备基准字号:移动端是10px,pc端是12px;
    

    Почему формула расчета такая? Потому что мы хотим поддерживать различные размеры шрифтов. Представьте, что разные размеры шрифта занимают разное физическое пространство, но если размер дорожки должен быть динамическим, это приведет к очень сложным вычислениям. В данной работе предлагается понятие «виртуальный путь», наиболее распространенным в управлении дорожным движением является слияние или перенаправление дорог. Мы также используем временное объединение соседних физических дорожек в одну дорожку. Таким образом, легко решается проблема заполнения дорожек разными размерами шрифта. Схематическая диаграмма выглядит следующим образом:

Рисунок 2.2 Принципиальная схема расчета орбиты

Далее вспомним рабочий процесс аэропорта:

  1. Капитан позвонил в диспетчерскую, CZ6132 запросил взлет.
    • В настоящее время взлетно-посадочная полоса занята, пожалуйста, подождите
      • Шаг 1 выполняется снова через N раз
    • Взлетно-посадочная полоса A1 в настоящее время свободна, доступ разрешен
      • перейти к шагу 3
  2. Диспетчерская вышка для проверки использования взлетно-посадочной полосы
  3. Выход на взлетно-посадочную полосу, взлет завершен
  4. Капитан сообщил на вышку, что взлет завершен и взлетно-посадочная полоса освобождена.
  5. Другие самолеты выполняют те же действия, что и выше.

Согласно этой идее, наш рабочий процесс заграждения:

  1. Заграждение входит в игрок
  2. Трек рассчитывается в соответствии со скоростью воспроизведения и размером экрана маркера, чтобы увидеть, есть ли подходящий трек для предоставления.
    • нет
      • У заграждения уведомлений нет подходящей дорожки, подождите, в то же время другие заграждения в очереди заграждения выполняют шаг 1 по очереди.
    • имеют
      • перейти к шагу 3
  3. Плеер загружает DOM экрана пули, начинает воспроизведение и ждет завершения воспроизведения.
  4. Уведомить дорожку об обновлении занятости дорожки после завершения воспроизведения
  5. Другие заграждения также следуют вышеуказанным шагам.

Рисунок 2.3 Принципиальная схема расчета доступности пути

Мы разобрались с основными принципами орбит, конечно, есть много деталей, например, как общаться с расписанием, как общаться с экранами пуль и алгоритмами обнаружения виртуальной орбиты. Заинтересованные студенты могут обратиться к кодексу. https://github.com/bytedance/xgplayer/blob/master/packages/xgplayer/src/control/makeBullet.js

  • Заградительный огонь Барраж должен в основном реализовать роль «самолета», и мы требуем, чтобы он имел свои собственные атрибуты и методы. Например, диспетчерский центр может получить всю свою основную информацию через id, а управление треком также можно проверить и обновить через экран маркеров. Разумеется, шквал также должен иметь такие функции, как автоматическое обновление статуса, перемещение, уведомление об окончании воспроизведения и автоматическое уничтожение.
  • расписание Планирование — это воплощение постановки сцены, контроля над гусеницами и заграждениями, а также идущего в ногу с игроком. Его обязанности заключаются в следующем:
    1. Интерактивное управление игроком
    2. Управление очередью заграждения
    3. обновление собственного статуса
    4. преобразование формата данных
    5. выполнение анимации Или более прямо описать это непосредственно блок-схемой:

После запуска экрана пули сначала проверьте, есть ли кэшированные данные локально.Если нет, напрямую запросите данные и кэшируйте их, затем выполните чтение данных, отфильтруйте данные в очередь экрана пули в первый раз и запустите таймер. в то же время. Данные очереди экрана пули будут периодически запрашивать дорожку, чтобы проверить, можно ли войти в экран пули в очереди.После регистрации дорожки после подтверждения экран пули может войти в проигрыватель, чтобы начать воспроизведение анимации. Таймер будет снова обновлять данные и входить в очередь заграждения каждые 2 секунды (для этого другого бизнеса можно настроить разные правила). После завершения чата-пули расписание и дорожка будут уведомлены.Расписание удалит экземпляр чата-пули из очереди чата-пули, а трек также удалит дорожку, занятую экземпляром чата-пули.

Все реализации кода исходят из парсера, который экономит трафикарбуз игрок, Github