Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine Уроки и Документация
            Документация для продвинутых пользователей
                Введение в Atom framework
                    Дизайн Фреймворка Atom

Дизайн Фреймворка Atom

Опубликованно: 06.03.2018, 20:28
Последняя редакция, Andry: 12.03.2018 19:11

Этот репозиторий, это результат этапа проектирования фрймворка Atom в течение многих лет.

Мотивация

Он родился для того, чтобы помочь JME3 сосредоточиться на разработке игры/симуляции, и в дальнейшем продвигать последние и будущие Java-технологии, чтобы превратить разработку игр в предприятие/AAA в качестве конечной цели, но пойти на компромисс/совместимости с существующей инфраструктурой JME3 и OpenGL.

Его концепция, дизайн и архитектура вдохновлены игровым движком AAA и решением Enterprise Java.

Обзор

На этой странице:

  1. Цели Фреймворка Atom — это расширять JME3 и язык Java, чтобы они больше подходили для разработчика игр.
  2. Проблемы приложений в реальном времени (особенно игры).
  3. Решения и те базовые платформы, которые мы собираемся использовать для достижения этих целей.
  4. Оставшиеся работы и видение будущего

Цели дизайна

Общие цели

  • Гибкость: Игра | симуляции главное, но не навязанное!
  • Модульная: Введение зависимостей вместе с введением компонентов
  • Параллельно: Использовать параллельные вычисления
  • Следующий сведенья: Приходит с ещё развивающимися технологиями и мощью языка Java.
  • Облачность готова: Масштабирование до сети и распределённых вычислений
  • С простотой: У инструментов GUI почти везде, нулевые потребности в конфигурации
  • Перенос на устройства: Может работать на широком спектр устройств PC-мобильные-TV.. любое, на котором есть Java!

Дополнительные подцели

  • Минимальные зависимости и их наложение
  • Малый размер и эффективность

Слайды

Здесь вы можете просматривать слайды и загружать документы о дизайне фреймворка Atom.

Приложения реального времени

Дизайн Atom СОЗДАН одновременно для приложений в реальном времени, встроенных систем и ИГР

Атом в сравнении с Птолемеем

Как упоминалось в введении в фреймворк Atom, он действительно вдохновлен проектом Птолемей

но на самом деле он имеет разные цели, методы, образ мышления и подходы. Сравнение различий с Птолемеем покажет много характеристик Atom.
Проект Птолемей изучает моделирование, симуляции и проектирование параллельных, встраиваемых систем реального времени. Основное внимание уделяется сборке параллельных компонентов. Ключевым основополагающим принципом в проекте является использование четко определенных моделей вычислений, которые определяют взаимодействие между компонентами. Областью основных решаемых проблем, является использование смешивания гетерогенных моделей вычислений.

В сравнении

Atom предназначен для СОЗДАНИЯ одновременно, приложений в реальном времени, встроенных систем и ИГР. Поэтому он больше фокусируется на генерации кода, профилировании, мониторинге; фокусируется больше на графике, физике, опыте игрока… и.т.д. В основе этого лежит довольно много концепций, собранных в Птолемее (не коде!).

Цели

Таким образом, цели двух проектов частично совпадать, но имеют разные точки зрения и образ мышления!

  • Atom не имеет ни малейшего отношения/интереса относительно математической/физической коррекции (то есть симуляции), но имеет интерес к графической стороне и общему поведению.
  • У Atom есть дух приложений с открытым исходным кодом… но не академический! Вы можете видеть, что Птолемей довольно «сложный и не очень популярный, поскольку он предоставлен в первую очередь для академической среды; в отличие от него, Atom предоставляется для каждого пользователя и для игры как для детей в песочнице.

Различия в методах:

  • Atom не просто зависит от четко определенных моделей!
  • Atom использует простые модели, а иногда проще значит лучше!
    • Модель Простые Сущности (Simplier Entity) (не абстрактный объект из Java)
    • Модель Актера(Actor) так же не абстрактная и на самом деле из потоковой среды
    • Никаких контрактов в Системе, изучение Системных связей и интерактивности не связано только с анализом данных, то есть системой мониторинга потока данных по рабочей системе.
    • Timming: из-за отсутствия интересов в математике / физике, модель времени и прецизионная модель не определены, но также и на платформе Java.
  • Те, что выше и основные методы, которые вы можете найти ниже, заставляют Atom быть менее независимым от Java, но также хорошо встраивают характеристики языков Java и среды времени выполнения. Так что можно сказать, что Atom строится прямо на вершине Java без колебаний!

Atom в сравнении с JScience

Atom также зависит от Javolution и имеет некоторые части из базы кода JScience, но в очередной раз цель, сосредоточение Atom в играх и симуляции … Также много методов Atom отличается от используемого в JScience.

Можно также видеть, что Atom полностью заполняет экспериментальный пакет игр JScience. :)

Целевые Устройства и Платформы

PC


Mobile


Android


Web


HTML5 и WebGL

Проблемы


Решения и Фреймворки и Платформы

В Java много хороших проектов с открытым исходным кодом уже предоставляют решения для различных задач в разработке программного обеспечения. Проблема в том, как склеить эти драгоценные камни соответствующим образом и привести к эффективному продукту хорошего качества — экономить время и усилия.

Сотни проектов с открытым исходным кодом …

Например, модуль AtomCore зависит от этих высококачественных библиотек:

  • JME3
  • Общие аннотации JSR Java:
  • Apache commons
    • Lang
    • Configurations
    • BeanUtils
    • Collections
  • Google’s
    • Guava:
    • Guice: Dependency injection
    • Snappy:
    • LevelDB
    • Auto

Другие требуют кусочков писать из sk

Платформа Atom для разработки дизайна

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

Игра и приложение в реальном времени


Кросс-игровые элементы

С уровня абстракции Game — это особый вид программного обеспечения (почти всегда):

  • составленные сущностями, и их Сцена;
  • где Действия происходят в цикле, процедура События;

Немного более подробно, Геймплей — это то, как игрок играет в Игру, имеет:

  • Logic:
    • Trigger: in which Conditions, active some appropriate Action, as primitive brick.
    • Rule: the laws, restrictions form the game rule which player, entities obey.
  • Routines: Situations/ Events/ Actions that happen in the game Cycle.
    • Story/Cinematic mode: When player just watch the game like a movie.
    • Interactive mode: When player interact with the game world
  • Control: The way player handle their entities
  • League:
    • Single: Infos, score, rewards stick to an individual
    • Multi: The way players join, left, make friend and interactive and play together…
  • Status: Way to pause/continue , save/load current game

«Программное обеспечение для игры» должно быть опубликовано в конкретной среде, а затем:

  • Configurations : appropriate settings for specific enviroment, device.
  • Data : appropriate size and format

Взаимодействие CPU-GPU


Java-родные взаимодействия


Тайминг


Цикл

Архитектура AtomCore

Ядро — это часть, которая фокусируется на игре и в режиме реального времени. Он объявляет

Здесь вы можете узнать больше об архитектуре Core. atomcore

Шаблоны проектирования и парадигмы программирования

Изучите эти надежные ресурсы, прежде чем мы углубимся в архитектуру Atom и где / почему / как они применяют каждый шаблон дизайна:

узоры

Вопросы программирования


Java, но не только Java

Большинство «Java-вещей в AtomCore — это Bean and Properties. Два чистых типа данных Java, которые очень полезны в игровом мире. Бин предназначен для моделирования игровых объектов и свойств для конфигурации.

Конечно, другие технологии Java также используются, но не упоминаются, потому что это не обязательно. Но Bean and Properties — это те технологии, которые сильно используются!

«Хорошие расширения Java, используемые в AtomCore 0.2+: Guava:

  • Принесите Eventbus, сеть в порядке
  • Коллекция, Свободный, функциональный синтаксис и вкус к Java.
  • Гуава также поддерживает операции кэширования, отражения и более низкого уровня

Guice: принести инъекцию зависимости, лучший модульный тест, рефакторинг в легкой манере.

Groovy — это JVM-язык и глубоко интегрирован с AtomCore, наиболее удобен как язык сценариев, но помнит, что он также может заменить Java или рассматривать как Java. Groovy также предлагает намного больше превосходных вещей.

Код и данные

Для большой игры количество требуемых данных может быть таким. В то время как сложность кода также быстро растет, в результате увеличения данных!

В какой-то момент нам нужно найти решение для сокращения «ручной обработки данных + кода и поддержки». То, что «генерирующий код также можно рассматривать как своего рода данные, родилось. Это называется управляемой данными архитектурой (решением). В AtomCore 0.2 у него есть функции для поддержки этой тенденции.

Вокруг Bean

Это так важно, чтобы упомянуть, что каждая инфраструктура технологий Atom основана на технологиях Bean / POJO.

Например:

  • AtomEX : the bridge to AKKA Actor model also use POJO as its candidate
  • EJB leverage…
  • Fx: use POJO as its effect elements

Вот краткое объяснение, почему Bean / POJO выбрано основой ядра Atom?

Как построено в Java-технологиях, Bean / POJO является единственным «хорошим решением»:
** «мост» ** ** от Java OOP до COP **, ** от Java OOP до AOP **
также можно рассматривать как
** от объектно-ориентированного программирования до ориентированного на данные программирования **
** от объектно-ориентированного программирования до аспектно-ориентированного программирования **
или ** Код, но также Данные ** …

Программирование Polyglot

Я хочу Лучшее из обоих миров! (.. если это возможно?)

Atom в своей основе пытается быть полиморфизмом (программирование полигонов), с набором с ООП, КС, АОП или функциональным … Да, это Java, но хороший вид Java.

Поскольку AtomScripting и другие используют Groovy, поэтому он наследует (много) емкость полигонов от Groovy.

Читайте: http://groovy-lang.org/Polyglot+Programming+with+Groovy

Функциональное реактивное программирование


Программирование на основе потока


Компонентное программирование


Комбинированное программирование


Управляемый данными и управляемый моделью и управляемый доменом


Модульная архитектура

Я хочу повторно использовать (или СУХОЙ) !!

Посмотрите, например, на игру JME3, например, менеджер, если вы хотите, чтобы работа двух менеджеров была совместной, но не зависела друг от друга, или что, если вы хотите, чтобы государство направляло Менеджер делать что-то, но имело минимальную информацию о них …

Более абстрактно, всякий раз, когда у вас есть какая-то Служба, которая свободно зависит друг от друга, вы должны попробовать Injection Dependency http://martinfowler.com/articles/injection.html.

Вот где Guice помогает в большой картине.

Внедрение зависимости


https://code.google.com/p/google-guice/

Инъекция компонентов


http://wiki.apidesign.org/wiki/Component_Injection

Инъекция зависимостей VS Компонентная инъекция


http://code.imagej.net/gbh/lookup/DependencyInjectionandLookup.html

Охлаждение управления зависимостью

Итак, что круто в зависимости от приложения в реальном времени и игры, в которую включен Atom … Многое, но позвольте мне отметить несколько:

Взаимозависимость в реальном времени — это новая функция для разработки игр … Представьте себе, что даже игра просто может загружать часть активов, а другая задерживается или отсутствует, график зависимости может помочь игровому циклу продолжать работать, часть его в среднем время.

Фактически граф зависимостей можно рассматривать как топографическую структуру графика зависимостей активов JME до его создания, означает жесткие ссылки через ссылки. Теперь, даже когда график активов только частично загружен, игра может запускаться, потому что после этого известно, что разрешение на безопасность разрешает график активов и график сцены.

Возможности предприятия. Вы можете себе представить, как инфраструктура Atom имеет тенденцию к объединению JME-игры и универсальной сети. На самом деле это не так сложно. Потому что Java-технологии уже существуют. Многие из них построены на вершине инъекции зависимостей и инверсии контроля (или еще) … Мне действительно нравится инъекция зависимостей, но я не могу согласиться с тем, что я всегда должен сочетаться с IoC как таковой. Это будет обсуждаться позже в этой документации

Предприятия


Услуги, зависимость и развязка

Мир enteprise развивает модульную парадигму, чтобы связать сервисы (база данных, конфигурации, сетевые протоколы, сеть …) и помочь им работать вместе в одном приложении.

Доступные услуги

Попробуйте AtomEx

К базе данных


В другой репозиторий


К конфигурациям


В Интернете

Мониторинг и рабочий процесс разработки


Будущее видение


Ссылки и вдохновение

Конструкция фреймворка Atom ограничена:

  • Игровая книга
  • Серия игр для игр
  • ИИ Game Engine книга
  • Книга Мудрости ИИ

другой GameEngine, который я использовал:

  • UDK
  • Единство
  • CryEngineSDK
  • Двигатели JavaScript-игр: CraftyJs, GameQuery ..
  • Flash-игры: Starling,
  • … десяток двигателей с близким исходным кодом.

другие технологии Java:

  • EJB
  • весна
  • Groovy
  • Netbean
  • … hunread проектов с открытым исходным кодом

Приступают к работе.


Переведено для jmonkeyengine.ru, оригинал
Автор перевода: Andry

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.