JPCT - Игровые движки - Файлы для игроделов - Создание игр. Частичный список классов класса Group Java3D

Вот скажите, где могут выполняются скрипты написанные на javascript: на сервере, на клиенте? На клиенте, говорите? Это устаревшая информация...

С введением в Java версии 1.6 Scripting API стало очень просто и удобно писать extension поинты и динамические конфигурации для серверной логики.

В этой статье я хочу коротко рассказать вам о ScriptEngine, ну и еще кое о чем.

В частности хочу сделать следующее:

  • На небольшом примере показать, как просто использовать скриптовый движок, встроенный в Java
  • Провести небольшой бенчмаркинг и убедить всех, что скрипты - это не так уж и медленно
  • Неявно рассказать, что JavaScript - один из самых мощных (и недооцененных) языков программирования:)

Работа со скриптовыми движками производится через интерфейс ScriptEngine. В JDK есть пока что только одна имплементация этого интерфейса - RhinoScriptEngine.

Сразу небольшой пример кода:

Public static void main(String args) throws ScriptException { ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); String helloWorld = (String) engine.eval(""Hello" + " World!""); System.out.println(helloWorld); }

Мы создаем ScriptEngine через ScriptEngineManager для языка JavaScript. Далее мы выполняем скрипт, суть которого - сконкатенировать 2 строки.

Как и во многих скриптовых языках, результатом вычисления некоторого куска кода является результат выполнения его последнего оператора. То есть результатом выполнения нашего кода будет строка - "Hello World !".

В одном проекте перед нашей командой возникла задача - создать механизм для гибкой маршрутизации СМС сообщений в зависимости от разных свойств (дата создания, оператор, номер назначения и т.д.).

Решено было попробовать движок, который встроен в JDK. Естественно, перед применением новой технологии необходимо проверить ее производительность. Ниже привожу код, который показывает, на что способен движок Rhino (код незначительно упрощен для улучшения понимания):

Import javax.script.*; public class ScriptBenchmarks { static String script = "sms.serviceNumber == "777" && sms.mobileNumber.startsWith("8050")"; static Sms sms = new Sms(); static int loops = 10000; static void init () { sms.setMobileNumber("80500000000"); sms.setServiceNumber("777"); } // testInitAndEvalInsideLoop average: 1ms static void testInitAnEvalInsideLoop() throws ScriptException { long start = System.currentTimeMillis(); for (int i = 0; i

Первый метод показывает скорость выполнения скрипта в случае, если движок каждый раз получается через ScriptEngineManager. Во втором методе ScriptEngine создается один раз. В третьем методе происходит создание прекомпилированного скрипта.

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

Надеюсь, статья была вам полезна. Если когда-нибудь вам придется предоставить API для гибкого конфигурирования заказчиком какой-либо логики, вспомните о том, что в JDK уже есть все, что вам нужно.

На этом, пожалуй, и закончу свое повествование. Жду вопросов и замечаний. Всего вам хорошего.

  • Жанровая направленность: 2D/3D игры любого жанра;
  • Платформа: Windows, Linux, Mac, Solaris, Windows CE, FreeBSD, Android и т.д;
  • Лицензия: бесплатная;
  • Языки программирования: Java;
  • Открытый исходный код: предоставляется;
  • Мультиплеер: возможен;
  • Достоинства: кроссплатформенный, оптимизированный, бесплатный, открытый и свободный;
  • Недостатки: не передовые по нынешним меркам графические возможности;
  • Разработчики движка: Helge Foerster.

    jPCT - это свободный 3D-движок для Java, который позволяет использовать OpenGL и Software рендеры на выбор. Данный движок подходит для разработки мощных 3D-приложений для десктопа, Интернета и Android. А небольшие игры на нём пишутся весьма просто и удобно. Движок разрабатывается с 2002 года.

    Для разработки под мобильные устройства на базе операционной системы Android имеется специальный билд движка - PCT-AE (Android Edition). Данный вариант сборки движка заточен под Android, имеет всё те же элементы за исключением некоторых особенностей, которые были устранены или упрощены из-за специфики платформы.

    В jPCT имеется система обнаружения и обработки столкновений - простейшая обработка физики. Имеется возможность подключения библиотек, например, физической библиотеки jBullet, если не хватает простых физических законов.

    Как уже было упомянуто, jPCT поддерживает работу с Software рендером и с OpenGL, что позволяет создавать приложения на разные платформы. Используются аппаратное ускорение, различные режимы экрана и разрешения. Можно использовать Swing/AWT как AWTGLRenderer.

    У движка имеются уже готовые классы для обработки пользовательского ввода. Например, для ввода с клавиатуры используется класс KeyMapper. Вы просто создаете новый объект KeyMapper а потом можете в любое время получить состояние клавиш с помощью вызова poll(). Также jPCT предоставляет классы Object3D, Сamera, World, поддерживает несколько форматов 3D-моделей, удобный их импорт и т.д.

    Получаемые игры можно распространять под нужные вам платформы, например, для отображения в окне браузера можно использовать java-апплет через Java Webstart. Также с минимальными изменениями кода игр их можно портировать под мобильную систему Android. На jPCT разрабатываются игры любой сложности и любого типа. Например, разрабатывается MMORPG "Technopolies", произведён порт "Quake3". Игра работают через LWJGL или JOGL на Windows, MacOS X, Linux (x86) и Solaris. Запускаются и функционируют на Windows CE, FreeBSD, MacOS 9 и на многих других платформах, поддерживающих Java.

    Вместе с движком поставляются необходимые дополнительные материалы: документация и необходимые нативные библиотеки. Получаемые приложения совместимы с Java 1.1 и с прочими старыми виртуальными машинами, типа Microsoft VM и Netscape 4 VM.

    Официальный сайт: http://www.jpct.net




    JPCT is a powerful solution for bringing 3D into the Java world. You want to write a fullscreen game that makes use of hardware acceleration? No problem, jPCT can render into a native (optionally fullscreen) OpenGL window. You may even distribute your game as an OpenGL powered desktop application via Java Webstart and offer an applet version in addition.

  • jMonkeyEngine (jME ) - игровой движок, предназначенный для создания современных трёхмерных приложений, активно использующих шейдеры.jMonkeyEngineнаписана исключительно на языке программированияJavaи использует по умолчаниюLWJGLдля рендеринга. Полностью поддерживаются версииOpenGLсо второй по четвёртую.

    jMonkeyEngine- проект с открытым исходным кодом. Он используется рядом коммерчерских компаний, специализируюихся на производстве компьютерных игр, и образовательных учреждений.По умолчанию jMonkeyEngine 3 поставляется вместе с SDK.

    Сам по себе jMonkeyEngine - лишь набор библиотек, служащий для низкоуровней разработки игровых приложений. Однако, при использовании его вместе с интегрированной средой разработки, например официальнымjMonkeyEngine 3 SDK , превращает его в высокоуровневый инструментарий разработки графических приложений. SDK основан на платформеNetBeans, позволяющей использовать графические редакторы и плагины. Помимо стандартного центра обновлений NetBeans, SDK имеет собственный репозиторий плагинов, позволяющий выбирать между стабильными и ежедневными сборками. Поддерживает разработку приложений подAndroid.

    jPCT - это свободный 3D-движок для Java, который позволяет использовать OpenGL и Software рендеры на выбор. Данный движок подходит для разработки мощных 3D-приложений для десктопа, Интернета и Android. А небольшие игры на нём пишутся весьма просто и удобно. Движок разрабатывается с 2002 года.

    Для разработки под мобильные устройства на базе операционной системы Android имеется специальный билд движка - PCT-AE (Android Edition). Данный вариант сборки движка заточен под Android, имеет всё те же элементы за исключением некоторых особенностей, которые были устранены или упрощены из-за специфики платформы.

    В jPCT имеется система обнаружения и обработки столкновений - простейшая обработка физики. Имеется возможность подключения библиотек, например, физической библиотеки jBullet, если не хватает простых физических законов.

    Как уже было упомянуто, jPCT поддерживает работу с Software рендером и с OpenGL, что позволяет создавать приложения на разные платформы. Используются аппаратное ускорение, различные режимы экрана и разрешения. Можно использовать Swing/AWT как AWTGLRenderer.

    У движка имеются уже готовые классы для обработки пользовательского ввода. Например, для ввода с клавиатуры используется класс KeyMapper. Вы просто создаете новый объект KeyMapper а потом можете в любое время получить состояние клавиш с помощью вызова poll(). Также jPCT предоставляет классы Object3D, Сamera, World, поддерживает несколько форматов 3D-моделей, удобный их импорт и т.д.

      1. Сцены Java 3d.

    Изображения, отображаемые с помощью Java 3D, называют сценами. Сцену также называют виртуальной вселенной - это трехмерное пространство, которое содержит набор фигур. Корнем сцены Java 3D является объект VirtualUniverse. Объект VirtualUniverse имеет систему координат для местоположения графов сцены, которые она содержит. Каждая трехмерная сцена Java 3D описывается рядом графов сцены - иерархических структур, которые задают атрибуты трехмерной среды. Каждый граф сцены прикреплен к объекту VirtualUniverse в определенной точке системы координат виртуальной системы. Граф сцены состоит из внутренней системы координат и графов - ветвей. Каждый граф сцены имеет внутреннюю систему координат. Класс Locale является корневым узлом графа сцены и содержит вложенные системы координат для виртуальной вселенной и ряд графов-ветвей. В Java 3D имеется два типа графов-ветвей: графы-ветви содержимого и графы-ветви представления. Графы-ветви содержимого задают содержимое в трехмерных сценах, включая геометрию, освещение, текстуры, вуалирование и поведение. Графы-ветви представления содержат платформы наблюдения -- коллекции объектов, которые определяют перспективу, позицию, ориентацию и масштаб в трехмерных сценах. Платформу наблюдения также называют точкой зрения.

    Класс SceneGraphObject Java 3D -- базовый класс для всех объектов в графе-ветви. Объект SceneGraphObject может содержать группу Group, которая представляет собой узел, содержащий множество дочерних узлов. Дочерними узлами группы Group могут быть группы (объект Group), листья (объект Leaf) или узлы-компоненты (объект NodeComponents). Узлы-листья Leaf задают геометрию, освещение и звук в графах-ветвях содержимого и компоненты платформы наблюдения в графе-ветви представления. Объекты NodeComponent задают различныекомпоненты в объектах Group и Leaf, такие как текстура и атрибуты цвета.

    В следующей таблице приведены некоторые подклассы классов Group, Leaf и Node-Component:

    Класс

    Описание

    Частичный список классов класса Group Java3D

    Корневой узел (объект Node) графа сцены, который вложен в класс Locale

    Может отображать либо один дочерний узел, либо несколько дочерних узлов, задаваемых маской

    Содержит преобразование (например, перемещение, вращение или масштабирование)

    Частичный список классов класса Leaf

    Содержит методы для получения пользовательского ввода (например,

    нажатие клавиш и щелчков мышью), а также методы, которые описывают поведение объекта при определенных событиях (например, при столкновениях)

    Описывает набор параметров источников освещения Java 3D

    Описывает трехмерные геометрические объекты

    Управляет точкой наблюдения трехмерной сцены

    Частичный список классов классаNodeComponent

    Задает атрибуты объекта Shape3D, такие как цвет и текстура

    Описывает свойства освещенного объекта (например, отраженный цвет.

    Таблица 2. Основные методы подкласса классов Group, Leaf и Node-Component

    jMonkey Engine . Отличная производительность, кроссплатформенность, свой SDK+редакторы, дружелюбное сообщество (вот только англоязычное). Частые обновления и отличная поддержка со стороны разрабов самого движка не может не радовать. Есть модификация версии от 2009 года, её авторы гордо именуют свой мод отдельным движком - Ardor3D (но вот только проект загнулся, какая досада). Даже официальный сайт модификации уже не работает, а перенаравляет на личный блог разработчиков. "Под капотом" стоит LWJGL (Light-Weight JavaGL), поддержка OpenGL v2+ и шейдеров. Плюшки - поддержка всякой лабуды типа Oculus Rift; возможна разработка Android-приложений.

    Мой вывод: если готовы приступить к более-чем-любительской разработке серьёзных проектов, то jME - ваш выбор.

    Bonzai Engine . Великолепные утилиты для разработки, но нет как и документации, так и сообщества. Немного отойду от темы и проведу небольшое сравнение сообществ движков jME и Bonzai Engine: в одном только Твиттере у jMonkey Engine 1725 подписчиков, а у Bonzai Engine всего 12. Продолжу: кроссплатформенность (Windows/Linux/Android), OpenGL v2+. Плюшки: редакторы есть даже на Android. Также движок обещает поддержку большого количества форматов моделей.

    Апдейт : документация внезапно появилась (просто я полтора года назад изучал этот движок, но документации не было вообще). Достойных (да и просто) проектов на этом движке я пока не встречал.

    Мой вывод: обёртка классная, а начинка оставляет желать лучшего.

    Приложения на Bonzai Engine: ???

    jPCT . Врядли библиотеку размером в 300 кб можно назвать движком, но всё же это лёгкий инструмент для создания простейших приложений. Есть неофициальный редактор, куча подробной документации и довольно большое дружелюбное(!) сообщество (был случай, что на форуме мне помогал сам создатель движка). Также есть поддержка Android (версия jPCT-AE). За "плечами" движка имеется куча приложений, созданных пользователями (лично я сам залипаю в одну игрушку). Прошу учесть, что такой "движок" не даст такую великолепную картинку, как, например, jME и Bonzai Engine, но тут FPS держится выше и стабильнее. Плюшки: поддержка скелетной анимации.

    Мой вывод: "дёшево и сердито".

    2D Движки

    Slick2D . Хороший производительный движок с открытым исходным кодом (лицензия BSD). Кроссплатформенность (Windows/Linux/Mac), поддержка OpenGL v2+. Плюшки: модуль физики jBox2D; легко делается GUI.

    Статьи по теме: