citrus game engine, Юрий Шумовский

24
Быстрая и удобная кроссплатформенная разработка для мобильных устройств на примере платформера CitrusGame Engine Шумовский Юрий Разработчик игр, http://mobgamedev.com [email protected]

Upload: it-share

Post on 22-Nov-2014

1.470 views

Category:

Technology


1 download

DESCRIPTION

CitrusGame Engine – быстрая и удобная кроссплатформенная разработка для мобильных устройств на примере платформера - Возможности, общий workspace, профилирование кода - Анимация героя, врагов; - Работа с физикой; - Создание и управление уровнями; - Эффекты Particle Systems; - Плюсы/минусы, советы к использованию.

TRANSCRIPT

Page 1: Citrus Game Engine, Юрий Шумовский

Быстрая и удобная

кроссплатформенная

разработка для мобильных

устройств на примере

платформера

CitrusGame Engine

Шумовский Юрий Разработчик игр, http://mobgamedev.com [email protected]

Page 2: Citrus Game Engine, Юрий Шумовский

Требования к порту игры «Конек-Горбунок»

Быстро

Дешево

Кроссплатформенно

Игровой автомат

iPhone

iPad

Аndroid

web

Page 3: Citrus Game Engine, Юрий Шумовский

Выбираем Кроссплатформенное решение

Page 4: Citrus Game Engine, Юрий Шумовский

Выбираем Кроссплатформенное решение

Page 5: Citrus Game Engine, Юрий Шумовский

Citrus game engine: что это, что в нем полезного и из чего состоит?

Citrus это:

Display frameworks (2D, 3D)

Physics frameworks

Multi resolution solution

Level manager

Sound manager

Gamepads

Camera system

Архитектура игры готовая к

применению

Игровые примитивы (Hero, Enemy,

Coin, MovingPlatform, Sensor, Teleport,

Cannon и прочее

Page 6: Citrus Game Engine, Юрий Шумовский

Starling

Starling

Stage3D

OpenGL, OpenGL ES 2.0, Direct3D

GPU

iPhone, Android…

Page 7: Citrus Game Engine, Юрий Шумовский

… extends StarlingCitrusEngine … extends CitrusEngine

super.handleAddedToStage(e);

Starling.multitouchEnabled = true;

setUpStarling(true, 0);

state = new Away3DGameState();

import citrus.objects.platformer.box2d.Hero; import citrus.objects.platformer.nape.Hero;

Page 8: Citrus Game Engine, Юрий Шумовский

Организация графики

Page 9: Citrus Game Engine, Юрий Шумовский

Решение 1. Свои наборы графики под каждое разрешение (1x, 1.5x, 2x, 4x, 5x)

_baseWidth = 480;

_baseHeight = 320;

_viewportMode = ViewportMode.FULLSCREEN;

_assetSizes = [1, 1.5, 2, 4, 5];

Assets.assets = new AssetManager

(scaleFactor);

Assets.assets.enqueue("multi-

resolutions/assets" +

caleFactor + "x.png");

Assets.assets.enqueue("multi-

resolutions/assets" +

caleFactor + "x.xml");

scaleFactor – вычисляется автоматически

1x

1.5x

2x

4x

Page 10: Citrus Game Engine, Юрий Шумовский

…но есть один недостаток

базовый размер для Android

все разрешения

не нарисуешь, а при

FULLSCREEN видно как

растягивается графика

Page 11: Citrus Game Engine, Юрий Шумовский

1) Используем base_width, base_height.

2) ScaleFactor считаем сами

3) Добавляем мертвые зоны +

маштабирование максимальной графики

var scaleYNormal:Number =

Math.round(stage.fullScreenHeight/(BASE_HEIGHT));

if (scaleYNormal < 2) {

scaleYNormal = 2;

}

var scaleOriginal:Number =

(stage.fullScreenHeight/BASE_HEIGHT)/scaleYNormal;

switch(stage.fullScreenHeight){

case 480:

yOffset = 160;

break;

case 500:

yOffset = 130;

break;

case 512:

yOffset = 130;

break;

….

Смещение по Y задаем вручную

Решение 2.

Page 12: Citrus Game Engine, Юрий Шумовский

Анимация в Citrus Engine

Атласы

(сиквенция картинок)

Анимация в SWF файле +

RUNTIME rendering

Скелетная анимация с

Dragon Bones

Page 13: Citrus Game Engine, Юрий Шумовский

Атлас собираем с отдельных картинок

помощью

http://www.codeandweb.com/texturepacker

var ta:TextureAtlas = new

TextureAtlas(Texture.fromBitmap(new

heroAnimBitmap()),XML(new heroAnimXML()));

var animationSeq:AnimationSequence = new

AnimationSequence(ta,["walk","idle",

"jump"],"idle",24);

hero.view = animationSeq;

[Embed(source="/../embed/games/hungryhero/g

raphics/mySpritesheet.png")]

public static const AtlasTextureGame:Class;

[Embed(source="/../embed/games/hungryhero/g

raphics/mySpritesheet.xml",

mimeType="application/octet-stream")]

public static const AtlasXmlGame:Class;

Использование Атласа

<XML>

Page 14: Citrus Game Engine, Юрий Шумовский

Анимация в SWF файле + RUNTIME rendering

При запуске, с каждого кадра анимации создается BitmapData

Page 15: Citrus Game Engine, Юрий Шумовский

Скелетная анимация с Dragon Bones

Texture.png

<XML>

skeleton.xml

<XML>

texture.xml

Page 16: Citrus Game Engine, Юрий Шумовский

Particle Systems

Page 17: Citrus Game Engine, Юрий Шумовский

Как создавать particle systems

Настраиваем визуальные

параметры

Экспортируем в XML +

texture

Используем в коде

http://onebyonedesign.com/flash/particleeditor/

particle.pex

texture.png

particleArt = new PDParticleSystem(particleXML, texture); particleArt.start();

flame = new CitrusSprite("flame",{view:particleArt}); add(flame);

Page 18: Citrus Game Engine, Юрий Шумовский

Физика в Citrus Engine

Page 19: Citrus Game Engine, Юрий Шумовский

Не стоит писать свой код обработки столкновений. Доверьтесь Box2D

var pika2:Sensor = Sensor(getObjectByName

("pika2"));

pika2.onBeginContact.add(onPikaHandler);

Page 20: Citrus Game Engine, Юрий Шумовский

Создание и управление уровнями

Page 21: Citrus Game Engine, Юрий Шумовский

Редакторы уровней

1. mapeditor

2. GLEED2D - Generic Level Editor 2D,

3. FlashIDE (используют даже HTML5 программисты)

Page 22: Citrus Game Engine, Юрий Шумовский

Редакторы уровней , используя Flash IDE

ObjectMaker2D.FromMovieClip(level);

Page 23: Citrus Game Engine, Юрий Шумовский

Плюсы/Минусы в Citrus Engine

Плюс

Плюс

Плюс

Минус

Минус

Минус

Page 24: Citrus Game Engine, Юрий Шумовский

The end

Благодарю за внимание!