Проекты
GameDev.ru / Проекты / Форум / Oxygine 2D C++ фреймворк

Oxygine 2D C++ фреймворк

Advanced: Тема повышенной сложности или важная.
Страницы: 1 2 356 57 Следующая »
FrankinshteinПостоялецwww3 мар. 201221:25#0
Изображение

Oxygine - это кроссплатформенный 2D фреймворк/движок для С++.
В его основе находится высокоуровневый Scene Graph, позволяющий заранее "создать и забыть" объект на экране, не возвращаясь более к нему, например, код ниже  создает на экране спрайт, запускается его покадровую зацикленную анимацию и двигает объект, дополнительно обрабатывая по нему клик мышкой.

    //создание спрайта на экране
    spSprite sprite = new Sprite();
    sprite->attachTo(getStage());
    sprite->setScale(0.5f);

    //запускаем по кадровую анимацию
    sprite->addTween(TweenAnim(gameResources.getResAnim("anim")), duration, loops));

    //запускаем движение спрайта
    sprite->addTween(Sprite::TweenPosition(x, y), duration, loops));

    //обработка событи клика по спрайту
    sprite->addEventListener(TouchEvent::CLICK, clickHandler);

Поддерживаемые платформы:

- Windows
- Linux
- Mac Os X
- iOS
- Android
- HTML5 (via Emscripten)

Основные преимущества:

- аккуратная модель обработки событий/нажатий, взятая полностью из Flash/ActionScript3
- система для анимации спрайтов (Tweening)
- встроенные инструменты для отладки SceneGraph
- высокая производительность
- сборка на основе SDL2 или Marmalade
- свободное использование, исходный код открыт под лицензией MIT


Сайт: http://oxygine.org
Твиттер: https://twitter.com/oxygine2d
Вики документация: https://bitbucket.org/oxygine/oxygine-framework/wiki/Home
Скачать SDK: http://oxygine.org/download.php

Дополнения к фреймворку:


- oxygine-moveclip библиотека для проигрывания флеш анимаций "по объектно" (экспортируются не все кадры, а только ключи).
- oxygine-flow  библиотека для создания системы диалогов/экранов  и перехода между ними
- oxygine-magicparticles  интеграция с движком частиц MagicParticles
- oxygine-sound звуковой движок, проигрывание ogg звуков и музыки с многопоточным стримингом
- oxygine-billing внутриигровые покупки для Android/Amazon
- тут все, что есть https://github.com/oxygine

Имеется редактор:


качать тут: http://oxygine.org/download.php
Изображение


Маленькая предыстория, зачем мне надо было делать это?

+ Показать

Описание и возможности:

•  Язык программирования C++.

•  Для отрисовки используется чистый OpenGL(ES) 2. Поддержка шейдеров. Поддержка сжатых текстур.

•  Запуск прямо из браузера с помощью Emscripten

•  Компонентная система, простой и предсказуемый ООП API. Возможность наследоваться от классов и переопределять их поведение.

•  Нет глобальных мега менеджеров всего и вся, навязывающих свои требования к написанию кода.

•  Эффективная и гибкая работа с ресурсами, максимально приближенная к вашей игре.

•  Компоненты движка слабо связаны между собой.
Их можно использовать вместе, раздельно или не использовать вовсе.

•  Быстрое создание/удаление объектов, используются memory pools для всех объектов движка.

•  Scene Graph построен на умных указателях (аналогия boost::intrusive_ptr).
Можно не мучиться с удалением объектов и порчей памяти, но иногда надо разруливать циклические ссылки (или не делать их).
Scene Graph чем-то похож на Flash. (картинки со схемой наследования 1, 2)
Если вы желаете использовать свой Scene Graph, то от Oxygine можно взять низкоуровневую систему вывода изображений.

•  Debug Tools. Tree Inspector - визуальный "профайлер" для Scene Graph, где можно прямо в игре исследовать граф и различные его узлы для анализа и поиска ошибок. Textures Inspector - анализ загруженных текстур.
screenshot

•  Рендер в текстуру.

•  Описание ресурсов хранится в xml файле. В нем довольно много различных опций: можно добавлять свои типы ресурсов, можно указывать формат, в котором нужно хранить текстуру (атлас) в памяти, количество строк/столбцов для анимации  и т.д. Любой ресурс может иметь дополнительные user-data атрибуты.

•  Есть Tweens для по-кадровой анимации, цвета, позиции, поворотов и т.д., можно легко добавлять свои.
Есть очереди из Tweens. Различные easing.

•  Набор базовых UI компонентов часто используемых в играх: Button, Sprite, ProgressBar и другие.

•  command-line утилита на Python для обработки ресурсов, которая умеет:
        - собирать ваши ресурсы из xml файлов в атласы, подбирая оптимальный размер атласов.
        - сжимать атласы в нужный формат текстур (ETC, PVRTC)
        - ресайзить ассеты из высокого разрешения в необходимое для игры
        - Выполняет дополнительную работу, которая оптимизирует работу с ресурсами в игре.

•  Продуманная обработка событий от мышки или multi touch касаний.
Можете, например, двумя пальцами зажать две кнопки на экране одновременно и без коллизий.

•  Различным обработчикам событий (или твинам) можно задавать коллбеки на основе Winnie.Closure.

•  Есть возможность работать с кодом и различными диалогами в блокирующем стиле (concurency programming/coroutines/сопрограммы) (пример). 

+ Показать

•  Аккуратный и точный рендеринг текста с поддержкой переносов строк, различного вертикального и горизонтального выравнивания текста, поддержка локализации, utf-8. Поддержка html тегов (screenshot).
Поддержка стилей текста.

•  Если вы хотите поддерживать несколько наборов графики для разных разрешений игры, например 480x320 и 960x640, то это можно сделать на уровне движка, добавив всего лишь пару строк кода.
Вам не придется подстраивать координаты объектов вручную под другое разрешение экрана. Достаточно хранить исходный арт в высоком разрешении.

•  Сборка в атласы на лету во время загрузки ресурсов, если вы не сделали это в заранее.

•  Многопоточная загрузка ресурсов.

•  Можно «частично» выгружать из памяти тяжелые ресурсы, например, такие как атласы.
Сам хендл ресурса с атласом останется валидным (как и его размеры) и даже будет указатель на текстуру, но сама текстура внутри будет пустой.
Это актуально и удобно, если есть жесткие ограничения по памяти: например, если создали весь UI заранее с полу загруженными/выгруженными  ресурсами, но пока нет (или уже нет) надобности их отображать.

•  Быстрый автоматический батчинг.

•  Поддержка различных шейдерных эффектов. Поддержка масок.

•  Растровые шрифты на основе BMFont. Есть возможность добавить свой тип шрифта.

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

Скомпилировать фреймворк можно на базе SDL2 или Marmalade.
Где от платформы берется только самый низкий уровень: инициализация приложения, ввод/вывод, opengl и тд.

Правка: 19 фев. 2016 10:37

FrankinshteinПостоялецwww3 мар. 201221:25#1
Примеры кода для общего представления.
    //create sprite and display it    //создание спрайта на экране
    spSprite sprite = new Sprite();
    sprite->setResAnim(gameResources.getResAnim("anim"));
    sprite->attachTo(getRoot());
    sprite->setScale(0.5f);

    //run animation tween    //запускаем твин по кадровой анимации
    sprite->addTween(TweenAnim(gameResources.getResAnim("anim2")), duration, loops));

    //run position tween     //запускаем твин позиции
    sprite->addTween(Sprite::TweenPosition(x, y), duration, loops));

    //handle events    //обработка событий
    sprite->addEventListener(TouchEvent::CLICK, CLOSURE(this, &someClass::onClick));

    //short syntax example    //сокращенный синтаксис
    sprite = initActor(new Sprite,
      arg_resAnim = gameResources.getResAnim("plus"),
      arg_scale = 0.5f,
      arg_onClick = CLOSURE(this, &HUD::clicked),
      arg_pos = Vector2(70, 55),
      arg_attachTo = getRoot());

Правка: 8 фев. 2015 2:17

FrankinshteinПостоялецwww3 мар. 201221:25#2







Правка: 2 апр. 2016 11:44

D@eMonDПостоялецwww4 мар. 20121:45#3
Frankinshtein
огромный респект, пугает только мармеладная основа.
Думаю имеет смысл делать движок уже на основе чистого Опенгла.

А вообще всё выглядит очень-очень вкусно) надеюсь не забросите поддержку движка

ASDПостоялецwww4 мар. 20122:28#4
> Еще один движок-обертка над OpenGL/D3D API скажете вы? Нет, это совсем не обертка, это

это обертка над Marmalade-ом, который кстати не бесплатный.


> Изначально разрабатывался для мобильных платформ

В чем заслуга, собственно, мармелада...


В остальном вроде всё норм.

FrankinshteinПостоялецwww4 мар. 20129:46#5
ASD
D@eMonD
Я же написал, что он умеет работать еще под Cocos2dx, но мармелад реально удобная штука и от него не хочется отказываться.

FrankinshteinПостоялецwww4 мар. 201219:28#6
апнем:)
andrey.mesheryakovПостоялецwww4 мар. 201220:12#7
Frankinshtein
> апнем:)

А кому может понадобиться этот ( любой другой молодой ) движок? Всмысле движки однозначно нужны. Но у всех они есть. У кого-то хорошие, у кого-то плохие... И вот так просто взять и пересесть на другой - это надо иметь смелость. А тут еще движок только недавно плявился, т.е. непонятно какие в нем косяки есть и непонятно, что с движком будет в дальнейшем.

Ну и это, у мармелада есть явные минусы. Мак и ПС в бете. Закрытый код ( т.е. встроить IOS апи от тогоже фиша не получится. )

RPGПостоялецwww4 мар. 201220:18#8
andrey.mesheryakov
> Но у всех они есть
И у каждого - свой:-D

А делать закрытый двиг на и без того закрытой платформе...

FrankinshteinПостоялецwww4 мар. 201220:33#9
>>А кому может понадобиться этот ( любой другой молодой ) движок?
я написал кому нужны в самом верху поста на своем примере.
Есть С++ альтернативы с таким набором фич?


>>Ну и это, у мармелада есть явные минусы.
>>А делать закрытый двиг на и без того закрытой платформе...
выделил жирным, что кроме закрытого мармелада есть еще и поддержка открытого кокоса

Правка: 4 мар. 2012 20:39

andrey.mesheryakovПостоялецwww4 мар. 201220:54#10
Frankinshtein
> я написал кому нужны в самом верху поста на своем примере.
> Есть С++ альтернативы с таким набором фичей?
Вроде как нету.
Но я не совсем уловил как ты ( ничего же, что я на ты? ) видишь применение своего движка другими людьми?
Покупка лицензии и саппорта?

И такой вопрос - движок же использует gles1.1. T.е. что там от самого мармелада? Ивенты всякие и билд-систем? Т.е. может быть есть смысл написать все полностью своё? Без мармелада? Если нет - почему?

FrankinshteinПостоялецwww4 мар. 201221:11#11
>>Но я не совсем уловил как ты ( ничего же, что я на ты? ) видишь применение своего движка другими людьми? Покупка лицензии и саппорта?
сейчас все безвозмездно даже саппорт, сначало нужно некоторое портфолио и комьюнити движка, а потом я подумаю, как сделать лучше

>>И такой вопрос - движок же использует gles1.1. T.е. что там от самого мармелада? Ивенты всякие и билд-систем?
верно, от мармелада билд система, инициализация и эвенты

>> Т.е. может быть есть смысл написать все полностью своё? Без мармелада? Если нет - почему?
напомню что есть еще поддержка кокоса:)

смысл сделать свое есть, но это огромная работа. За iOS я не переживаю, но поддерживать весь зоопарк Андроидов довольно тяжело с учетом различных проблем в АПИ

Правка: 6 мая 2012 22:35

FrankinshteinПостоялецwww8 мар. 201213:19#12
обновил билд:
- улучшена обработка событий
- улучшен профайлинг утечек
- добавлен DragHandler. С помощью него можно легко сделать перетаскивание объектов. Причем даже если перетаскиваемый актер (или кто-то выше из его родителей) имеет необычную трасформацию (есть вращения, растяжение  и тд), то перетаскивание будет работать корректно

Правка: 8 мар. 2012 13:38

FrankinshteinПостоялецwww8 мар. 201213:59#13
схема наследования классов входящих в  Scene Graph
Изображение

Правка: 8 мар. 2012 14:14

project_managerПостоялецwww8 мар. 201214:18#14
Modal, ого новая сущность http://ru.wikipedia.org/wiki/Модал?
Страницы: 1 2 356 57 Следующая »

/ Форум / Проекты / Утилиты

2001—2018 © GameDev.ru — Разработка игр