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

Вот скажите, где могут выполняются скрипты написанные на 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.

  • 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.

    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

    Решил посмотреть, а что собственно есть на эту тему - накопал страницу википедии - само-собой на аглицком языке. Итак начнем! Движки рассматриваются только бесплатные и открытые.

    Agar - написан на C и C++, есть связь с языком Ада, с другими - в разработке. Последнее обновление 30 октября 2008 года.
    - разработан Open Source сообществом на основе исходных кодов игры Marathon 2: Durandal, разработанной компанией Bungie Software в 1995 году. Поддержка основных операционных систем. Есть собственный язык Marathon Markup Language, поддержка Lua. Обновлялся последний раз 22 июля 2008 года.
    Allegro - библиотека для разработки игр. Написана на С/С++, кросплатформенная. Есть связь практически с большинством языков - Ada, C++, C#, D, LISP, Lua,Mercury, Pascal, Perl, Python, Scheme и др.
    Blender GE - ну думаю в представлении не нуждается.
    - движок на основе Doom
    Box2D - кросплатформенный игровой физический движок, написан Erin Catto на С++. Известен тем, что использовался при создании игры Crayon Physics Deluxe (пазлы). Взял премию в IGF (Independent Game Festival).
    CranLib - кросплатформенная объектно-ориентированная библиотека на C++. На форуме сайта видно движение - проект актуальный.
    Crystal Entity Layer - расширение движка Crystal Space
    Crystal Space - хорошая среда разработки. Работают совмество с разработчиками Blender.
    Cube - кросплатформенный движок одноименной игры для создания шутеров.
    DarkPlaces - сильно модифициоранный движок Quake с поддержкой современной графики.
    Delta3D - кросплатформенный, хорошо развивается, свежий релиз вышел совсем недавно.
    Doom - теперь уже открытый и бесплатный движок.
    DXFramework - движок по Win (использует DirectX) для скорее образовательных целей.
    EternityEngine - еще один модифицированный Doom движок.
    открытая реализация популярного движка Ultima IV.
    FIFE - дфижок для создания 2D изометрических игр.
    GZDoom - еще один модифицированный Doom.
    Genesis3D - 3D движок реального времени под Windows
    GenesisDevice - мощный движок, написанный на Object Pascal под Windows платформу.
    Horse3D - маленький и мощный движок.
    - кросплатформенный, написан на С++, поддерживает языки #NET,java, perl, ruby, basic, python, lua, и другие.
    jMonkeyEngine - Java - движок.
    - основанный на Java клиент-серверный движок для создания он-лайн игр типа шашки, шахматы и тд.
    KallistiOS - среда разработки для игровых консолей Dreamcast(tm), Gameboy Advance(tm), Playstation 2(tm), and x86-based компьютеров.
    Lightfeather - кросплатформенный, отличный движок!
    Nebula Device - 3D движок реального времени разработанный студией Radon Labs. Обновлялся в сентябре 2008. Расчитан на Windows, но есть порты на Mac и Linux.
    OGRE Engine - очень популярный обьектно-ориентированный графический движок. Также известен как OGRE3D. Написан на С++. Существует поддержка Windows, Linux и Mac OS.
    ORX - портативный легкий игровой 2D-ориентированный движок. Написан на С с архитектурой плагинов (на С++) - кросплатформенный.
    Panda3D - относительно легкий в использовании python-управляемый игровой движок созданный Carnegie Mellon University . Его использует Disney для производства своих игр.
    RealmForge - движок для.NET
    - движок для создания шутеров от первого лица (Windows).
    Sauerbraten модифицированный кросплатформенный Cube (aka Cube2) движок.
    SDL - библиотека SDL. В комментировании не нуждается.
    SFML простая и быстрая мультимедиа библиотека.
    Spring - мощный игровой движок реального времени.
    - хороший движок для создания 2D игр. В 2007 году разработчики перешли в проект Bos Wars
    Xilon II - непримечательный 2D движок под Visual Basic .NET

    На этом пока бесплатные и открытые движки заканчиваются, но и так видно, что инструментов для создания анимации - пруд пруди и маленькая тележка!

    В следующий раз рассмотрим просто бесплатные движки.

    Обзор бесплатных open-source игровых движков. дата: 08:12 Оценка: 5

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