SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
Tools for Android Games




Raul Portales
@sla_shalafi          @thepilltree
raul@plattysoft.com   http://thepilltree.com
Summary
●   Introduction to game development
●   Engines
       ●   AndEngine
       ●   jPCT-AE
●   Scores / Achievements
●   Monetization systems
Game Architecture (Simplified)

               Game Engine




 Draw Thread   Game Objects   Update Thread
Performance Tips
●   Avoid object creations
       ●   Use pools and pre create them
●   Avoid getters and setters
       ●   Public attributes instead
●   Avoid collections
●   Avoid interfaces
●   Use a single Activity
Why use OpenGL?




   Performance
Why use OpenGL?




   Performance
Why use any Engine




You don’t want to start from scratch
AndEngine
AndEngine
●   http://www.andengine.org/
●   2D Graphics Engine
●   LGPL
●   Extensions
       ●   Physics Engine (Box2D)
       ●   Live Wallpapers
       ●   etc
Games built with AndEngine
●   Chalk Ball
●   Bunny Shooter
●   Greedy Spiders
●   Wheelz
●   Farm Tower
●   ...
Games built with AndEngine
Project setup
●   Put the jar under libs
        ●   Add them to the build
             path
●   Don’t forget “armeabi”
●   Get the source
        ●   Import project
        ●   Create res dir
Concepts
●   Engine
●   Scene
       ●   Sprites + Handlers
●   Texture / Texture Atlas
●   Sprite
●   Body
       ●   Fixture
Game Architecture / AndEngine
                Game Engine




  Draw Thread   Game Objects   Update Thread



                   Scene       UpdateHandler



                   Sprites
Activity creation flow
●   BaseGameActivity
       ●   onLoadEngine
       ●   onLoadResources
       ●   onLoadScene
       ●   onLoadComplete
Creating the Engine (1/2)
public Engine onLoadEngine() {
DisplayMetrics om = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(om);
camWidth = 480;
camHeight = (int) (om.heightPixels*480f / om.widthPixels);
RatioResolutionPolicy rrp = new
RatioResolutionPolicy(camWidth, camHeight);
Camera camera = new Camera(0, 0, camWidth, camHeight);
Creating the Engine (2/2)
EngineOptions options = new EngineOptions(true,
ScreenOrientation.LANDSCAPE, rrp, camera);


options.getRenderOptions()
.disableExtensionVertexBufferObjects();


return new Engine(options);
}
Loading Resources
public void onLoadResources() {
BitmapTextureAtlas bitmapTextureAtlas = new
BitmapTextureAtlas(64, 64,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
mBoxTextureRegion =
BitmapTextureAtlasTextureRegionFactory
.createFromAsset(bitmapTextureAtlas, this,
"box_icon.png", 0, 0);
mEngine.getTextureManager()
.loadTexture(bitmapTextureAtlas);
}
Texture Atlas
●   Quite a pain for AndEngine
       ●   Built by hand
       ●   Size must be a power of 2
       ●   One big or many small ones?
Creating the Scene (1/3)
public Scene onLoadScene() {
Scene scene = new Scene();
PhysicsWorld physicsWorld = new PhysicsWorld(new
Vector2(0, SensorManager.GRAVITY_EARTH), false);
Shape ground = new Rectangle(0, camHeight - 2,
camWidth, 2);
FixtureDef wallFixtureDef =
PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f);
PhysicsFactory.createBoxBody(physicsWorld, ground,
BodyType.StaticBody, wallFixtureDef);
scene.attachChild(ground);
Creating the Scene (2/3)
Sprite box = new Sprite(0, 0, mBoxTextureRegion);
FixtureDef boxFixture =
PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f);
Body boxBody =
PhysicsFactory.createBoxBody(physicsWorld, box,
BodyType.DynamicBody, boxFixture);
physicsWorld.registerPhysicsConnector(new
PhysicsConnector(box, boxBody, true, true));


scene.attachChild(box);
Creating the Scene (3/3)
scene.registerUpdateHandler(physicsWorld);
scene.registerUpdateHandler(mUpdateHandler);
return scene;
}
Types of bodies
●   Dynamic
        ●   It is affected by physics like gravity
●   Kinematic
        ●   It moves in a specified way
●   Static
        ●   It does not move
More Interesting things
●   TiledTextures / Animated Sprites
●   Animations
●   Sound Engine
●   Particle Systems
●   Collision Detect
●   Polygonal Bodies
●   Menus
Intermission



     ← AndEngine Example apk
jPCT-AE
jPCT-AE
●   http://www.jpct.net/jpct-ae/
●   3D Engine
        ●   3DObjects
        ●   Lights
        ●   etc
●   No physics
        ●   It has collision detection
Games built with jPCT-AE
●   SpaceCat
●   SkyFrontier
●   Forgotten Elements
●   Mobialia Chess
●   Freddy Budgett
●   Alien Runner
●   ...
Games built with jPCT-AE
Project setup




Add jpct-ae.jar to libs / Build path
Concepts / Classes
●   Renderer / FrameBuffer
●   World
●   Texture / TextureManager
●   Object3D
●   Light
●   Camera
Game Architecture / jPCT-AE
              Game Engine




Draw Thread   Game Objects   Update Thread




 Renderer        World



                3DObject
Preparing the GLSurfaceView
mGlView = (GLSurfaceView) findViewById(R.id.glview);
mGlView.setKeepScreenOn(true);
mViewRenderer = new MyRenderer(mGlView, mWorld);
mGlView.setRenderer(mViewRenderer);
Renderer setup
public void onDrawFrame(GL10 gl) {
    buffer.clear(back);
    synchronized (mWorld) {
        mWorld.renderScene(buffer);
        mWorld.draw(buffer);
    }
    buffer.display();
}
Setup the World
mWorld = new World();
mWorld.setAmbientLight(150, 150, 150);
Loading Textures
Resources res = getResources();
Texture texture =
   new Texture(res.getDrawable(R.raw.texture));
TextureManager.getInstance()
   .addTexture("texture", texture);
Loading Objects
mModel = Loader.load3DS(getResources()
   .openRawResource(R.raw.model), 1)[0];
mModel.setTexture("texture");


mWorld.addObject(mModel);
mWorld.buildAllObjects();
Creating Lights
Light sun = new Light(mWorld);
sun.setIntensity(250, 250, 250);
SimpleVector sv = new SimpleVector(0, -100, -100);
sun.setPosition(sv);
Handling the camera
Camera cam = mWorld.getCamera();
cam.setPosition(new SimpleVector(0, 0,-100));
cam.lookAt(mModel.getTransformedCenter());
More about the camera
●   It has a position
        ●   Camera.setPosition
●   It has a target
        ●   Camera.lookAt
●   It has a rotation
        ●   Camera.setRotation
The 3D axis
Operations with objects
●   Hierarchy
       ●   addChild
●   Move
       ●   setPosition / translate
●   Rotation
       ●   rotateX, rotateY, rotateZ
More Interesting Things
●   Keyframe Animations
●   Collision detect (Ellipsoids)
●   Billboards
●   Transparency
●   Culling
●   Primitive Objects
And a workaround
●   Overlay native layouts
       ●   Menus
       ●   Dialogs
Another Intermission



          ← jPCT-AE Example apk
Bonus: Other Engines
●   PlayN
       ●    https://developers.google.com/playn/
●   NME
       ●    http://www.haxenme.org/
●   Unity
       ●    http://unity3d.com/
●   Game Maker
       ●    http://www.yoyogames.com/make
Scores / Achievements
Why use a Library?
●   Not reinventing the wheel
        ●   It is proven that works
●   Familiarity for users
        ●   Other games use them
●   You do not own the servers
        ●   You don’t, and that is good
Available libraries
●   ScoreLoop        ●   OpenFeint
What do you get?
●   Achievements
       ●   Not very impressive
●   Leaderboards
       ●   That is interesting
●   News Feed
●   Friends management
●   Improved engagement
Easy to integrate
●   Android Library Project
●   Initialize with the Application
●   Open a specific screen
        ●   2 lines of code
●   Submit a score or achievement
        ●   2 lines of code
Monetization




Too much to say for a single slide
And now...
●   Lunch
●   Pitch your game idea
       ●   Gather a team
●   Hackaton
●   Demos, Pizza & Beer
Tools for Android Games




Raul Portales
@sla_shalafi          @thepilltree
raul@plattysoft.com   http://thepilltree.com

Más contenido relacionado

La actualidad más candente

The Ring programming language version 1.6 book - Part 56 of 189
The Ring programming language version 1.6 book - Part 56 of 189The Ring programming language version 1.6 book - Part 56 of 189
The Ring programming language version 1.6 book - Part 56 of 189Mahmoud Samir Fayed
 
Cross platform game development
Cross platform game developmentCross platform game development
Cross platform game developmentJerel Hass
 
The Ring programming language version 1.5.2 book - Part 53 of 181
The Ring programming language version 1.5.2 book - Part 53 of 181The Ring programming language version 1.5.2 book - Part 53 of 181
The Ring programming language version 1.5.2 book - Part 53 of 181Mahmoud Samir Fayed
 
WP7 HUB_XNA overview
WP7 HUB_XNA overviewWP7 HUB_XNA overview
WP7 HUB_XNA overviewMICTT Palma
 
Academy PRO: Unity 3D. Environment
Academy PRO: Unity 3D. EnvironmentAcademy PRO: Unity 3D. Environment
Academy PRO: Unity 3D. EnvironmentBinary Studio
 
The Ring programming language version 1.8 book - Part 56 of 202
The Ring programming language version 1.8 book - Part 56 of 202The Ring programming language version 1.8 book - Part 56 of 202
The Ring programming language version 1.8 book - Part 56 of 202Mahmoud Samir Fayed
 
Денис Ковалев «Python в игровой индустрии»
Денис Ковалев «Python в игровой индустрии»Денис Ковалев «Python в игровой индустрии»
Денис Ковалев «Python в игровой индустрии»DataArt
 
Introducing perf budgets on CI with puppeteer - perf.now()
Introducing perf budgets on CI with puppeteer - perf.now()Introducing perf budgets on CI with puppeteer - perf.now()
Introducing perf budgets on CI with puppeteer - perf.now()Önder Ceylan
 
The Ring programming language version 1.8 book - Part 122 of 202
The Ring programming language version 1.8 book - Part 122 of 202The Ring programming language version 1.8 book - Part 122 of 202
The Ring programming language version 1.8 book - Part 122 of 202Mahmoud Samir Fayed
 
UIImageView vs Metal #tryswiftconf
UIImageView vs Metal #tryswiftconfUIImageView vs Metal #tryswiftconf
UIImageView vs Metal #tryswiftconfShuichi Tsutsumi
 
Cocos2d-x C++ Windows 8 &Windows Phone 8
Cocos2d-x C++ Windows 8 &Windows Phone 8Cocos2d-x C++ Windows 8 &Windows Phone 8
Cocos2d-x C++ Windows 8 &Windows Phone 8Troy Miles
 
2d game engine workflow
2d game engine workflow2d game engine workflow
2d game engine workflowluisfvazquez1
 
Test Driven Cocos2d
Test Driven Cocos2dTest Driven Cocos2d
Test Driven Cocos2dEric Smith
 
The Ring programming language version 1.5.1 book - Part 48 of 180
The Ring programming language version 1.5.1 book - Part 48 of 180The Ring programming language version 1.5.1 book - Part 48 of 180
The Ring programming language version 1.5.1 book - Part 48 of 180Mahmoud Samir Fayed
 
Game development with Cocos2d-x Engine
Game development with Cocos2d-x EngineGame development with Cocos2d-x Engine
Game development with Cocos2d-x EngineDuy Tan Geek
 
libGDX: Screens, Fonts and Preferences
libGDX: Screens, Fonts and PreferenceslibGDX: Screens, Fonts and Preferences
libGDX: Screens, Fonts and PreferencesJussi Pohjolainen
 

La actualidad más candente (20)

The Ring programming language version 1.6 book - Part 56 of 189
The Ring programming language version 1.6 book - Part 56 of 189The Ring programming language version 1.6 book - Part 56 of 189
The Ring programming language version 1.6 book - Part 56 of 189
 
Cross platform game development
Cross platform game developmentCross platform game development
Cross platform game development
 
The Ring programming language version 1.5.2 book - Part 53 of 181
The Ring programming language version 1.5.2 book - Part 53 of 181The Ring programming language version 1.5.2 book - Part 53 of 181
The Ring programming language version 1.5.2 book - Part 53 of 181
 
WP7 HUB_XNA overview
WP7 HUB_XNA overviewWP7 HUB_XNA overview
WP7 HUB_XNA overview
 
Academy PRO: Unity 3D. Environment
Academy PRO: Unity 3D. EnvironmentAcademy PRO: Unity 3D. Environment
Academy PRO: Unity 3D. Environment
 
WP7 HUB_XNA
WP7 HUB_XNAWP7 HUB_XNA
WP7 HUB_XNA
 
The Ring programming language version 1.8 book - Part 56 of 202
The Ring programming language version 1.8 book - Part 56 of 202The Ring programming language version 1.8 book - Part 56 of 202
The Ring programming language version 1.8 book - Part 56 of 202
 
Денис Ковалев «Python в игровой индустрии»
Денис Ковалев «Python в игровой индустрии»Денис Ковалев «Python в игровой индустрии»
Денис Ковалев «Python в игровой индустрии»
 
Introducing perf budgets on CI with puppeteer - perf.now()
Introducing perf budgets on CI with puppeteer - perf.now()Introducing perf budgets on CI with puppeteer - perf.now()
Introducing perf budgets on CI with puppeteer - perf.now()
 
Programmers guide
Programmers guideProgrammers guide
Programmers guide
 
The Ring programming language version 1.8 book - Part 122 of 202
The Ring programming language version 1.8 book - Part 122 of 202The Ring programming language version 1.8 book - Part 122 of 202
The Ring programming language version 1.8 book - Part 122 of 202
 
iOS Training Session-3
iOS Training Session-3iOS Training Session-3
iOS Training Session-3
 
UIImageView vs Metal #tryswiftconf
UIImageView vs Metal #tryswiftconfUIImageView vs Metal #tryswiftconf
UIImageView vs Metal #tryswiftconf
 
Pygame presentation
Pygame presentationPygame presentation
Pygame presentation
 
Cocos2d-x C++ Windows 8 &Windows Phone 8
Cocos2d-x C++ Windows 8 &Windows Phone 8Cocos2d-x C++ Windows 8 &Windows Phone 8
Cocos2d-x C++ Windows 8 &Windows Phone 8
 
2d game engine workflow
2d game engine workflow2d game engine workflow
2d game engine workflow
 
Test Driven Cocos2d
Test Driven Cocos2dTest Driven Cocos2d
Test Driven Cocos2d
 
The Ring programming language version 1.5.1 book - Part 48 of 180
The Ring programming language version 1.5.1 book - Part 48 of 180The Ring programming language version 1.5.1 book - Part 48 of 180
The Ring programming language version 1.5.1 book - Part 48 of 180
 
Game development with Cocos2d-x Engine
Game development with Cocos2d-x EngineGame development with Cocos2d-x Engine
Game development with Cocos2d-x Engine
 
libGDX: Screens, Fonts and Preferences
libGDX: Screens, Fonts and PreferenceslibGDX: Screens, Fonts and Preferences
libGDX: Screens, Fonts and Preferences
 

Similar a Tools for developing Android Games

Android game development
Android game developmentAndroid game development
Android game developmentdmontagni
 
How to build Kick Ass Games in the Cloud
How to build Kick Ass Games in the CloudHow to build Kick Ass Games in the Cloud
How to build Kick Ass Games in the CloudChris Schalk
 
3D Programming Basics: WebGL
3D Programming Basics: WebGL3D Programming Basics: WebGL
3D Programming Basics: WebGLGlobant
 
Introduction to threejs
Introduction to threejsIntroduction to threejs
Introduction to threejsGareth Marland
 
Virtual Reality in Android
Virtual Reality in AndroidVirtual Reality in Android
Virtual Reality in AndroidMario Bodemann
 
Ujug07presentation
Ujug07presentationUjug07presentation
Ujug07presentationBill Adams
 
JS digest. February 2017
JS digest. February 2017JS digest. February 2017
JS digest. February 2017ElifTech
 
A friend in need - A JS indeed
A friend in need - A JS indeedA friend in need - A JS indeed
A friend in need - A JS indeedYonatan Levin
 
a friend in need-a js indeed / Yonatan levin
a friend in need-a js indeed / Yonatan levina friend in need-a js indeed / Yonatan levin
a friend in need-a js indeed / Yonatan levingeektimecoil
 
Rendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR FoundationRendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR FoundationUnity Technologies
 
Customizing a production pipeline
Customizing a production pipelineCustomizing a production pipeline
Customizing a production pipelineFelipe Lira
 
Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5Takao Wada
 
Building Kick Ass Video Games for the Cloud
Building Kick Ass Video Games for the CloudBuilding Kick Ass Video Games for the Cloud
Building Kick Ass Video Games for the CloudChris Schalk
 
Game development with Cocos2d
Game development with Cocos2dGame development with Cocos2d
Game development with Cocos2dVinsol
 
WT-4067, High performance WebGL games with the Turbulenz Engine, by Ian Balla...
WT-4067, High performance WebGL games with the Turbulenz Engine, by Ian Balla...WT-4067, High performance WebGL games with the Turbulenz Engine, by Ian Balla...
WT-4067, High performance WebGL games with the Turbulenz Engine, by Ian Balla...AMD Developer Central
 

Similar a Tools for developing Android Games (20)

Android game development
Android game developmentAndroid game development
Android game development
 
How to build Kick Ass Games in the Cloud
How to build Kick Ass Games in the CloudHow to build Kick Ass Games in the Cloud
How to build Kick Ass Games in the Cloud
 
3D Programming Basics: WebGL
3D Programming Basics: WebGL3D Programming Basics: WebGL
3D Programming Basics: WebGL
 
Introduction to Unity
Introduction to UnityIntroduction to Unity
Introduction to Unity
 
Introduction to threejs
Introduction to threejsIntroduction to threejs
Introduction to threejs
 
Virtual Reality in Android
Virtual Reality in AndroidVirtual Reality in Android
Virtual Reality in Android
 
Webrender 1.0
Webrender 1.0Webrender 1.0
Webrender 1.0
 
Ujug07presentation
Ujug07presentationUjug07presentation
Ujug07presentation
 
WebGL 3D player
WebGL 3D playerWebGL 3D player
WebGL 3D player
 
JS digest. February 2017
JS digest. February 2017JS digest. February 2017
JS digest. February 2017
 
Transitioning to Native
Transitioning to NativeTransitioning to Native
Transitioning to Native
 
A friend in need - A JS indeed
A friend in need - A JS indeedA friend in need - A JS indeed
A friend in need - A JS indeed
 
a friend in need-a js indeed / Yonatan levin
a friend in need-a js indeed / Yonatan levina friend in need-a js indeed / Yonatan levin
a friend in need-a js indeed / Yonatan levin
 
Rendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR FoundationRendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
 
Customizing a production pipeline
Customizing a production pipelineCustomizing a production pipeline
Customizing a production pipeline
 
Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5
 
Building Kick Ass Video Games for the Cloud
Building Kick Ass Video Games for the CloudBuilding Kick Ass Video Games for the Cloud
Building Kick Ass Video Games for the Cloud
 
Game development with Cocos2d
Game development with Cocos2dGame development with Cocos2d
Game development with Cocos2d
 
FLAR Workflow
FLAR WorkflowFLAR Workflow
FLAR Workflow
 
WT-4067, High performance WebGL games with the Turbulenz Engine, by Ian Balla...
WT-4067, High performance WebGL games with the Turbulenz Engine, by Ian Balla...WT-4067, High performance WebGL games with the Turbulenz Engine, by Ian Balla...
WT-4067, High performance WebGL games with the Turbulenz Engine, by Ian Balla...
 

Más de Platty Soft

Integrating Google Play Games
Integrating Google Play GamesIntegrating Google Play Games
Integrating Google Play GamesPlatty Soft
 
The Indie Game Developer Survival Guide
The Indie Game Developer Survival GuideThe Indie Game Developer Survival Guide
The Indie Game Developer Survival GuidePlatty Soft
 
Continuous integration for Android
Continuous integration for AndroidContinuous integration for Android
Continuous integration for AndroidPlatty Soft
 
Android design patterns
Android design patternsAndroid design patterns
Android design patternsPlatty Soft
 
Road to Publishing
Road to PublishingRoad to Publishing
Road to PublishingPlatty Soft
 

Más de Platty Soft (6)

Integrating Google Play Games
Integrating Google Play GamesIntegrating Google Play Games
Integrating Google Play Games
 
The Indie Game Developer Survival Guide
The Indie Game Developer Survival GuideThe Indie Game Developer Survival Guide
The Indie Game Developer Survival Guide
 
Continuous integration for Android
Continuous integration for AndroidContinuous integration for Android
Continuous integration for Android
 
Android design patterns
Android design patternsAndroid design patterns
Android design patterns
 
Piracy on Apps
Piracy on AppsPiracy on Apps
Piracy on Apps
 
Road to Publishing
Road to PublishingRoad to Publishing
Road to Publishing
 

Último

TrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc
 
The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)IES VE
 
LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0DanBrown980551
 
Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...DianaGray10
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightSafe Software
 
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechWebinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechProduct School
 
UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4DianaGray10
 
Top 10 Squarespace Development Companies
Top 10 Squarespace Development CompaniesTop 10 Squarespace Development Companies
Top 10 Squarespace Development CompaniesTopCSSGallery
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)codyslingerland1
 
March Patch Tuesday
March Patch TuesdayMarch Patch Tuesday
March Patch TuesdayIvanti
 
UiPath Studio Web workshop series - Day 1
UiPath Studio Web workshop series  - Day 1UiPath Studio Web workshop series  - Day 1
UiPath Studio Web workshop series - Day 1DianaGray10
 
2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdfThe Good Food Institute
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInThousandEyes
 
UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2DianaGray10
 
AI Workshops at Computers In Libraries 2024
AI Workshops at Computers In Libraries 2024AI Workshops at Computers In Libraries 2024
AI Workshops at Computers In Libraries 2024Brian Pichman
 
Scenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosScenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosErol GIRAUDY
 
Technical SEO for Improved Accessibility WTS FEST
Technical SEO for Improved Accessibility  WTS FESTTechnical SEO for Improved Accessibility  WTS FEST
Technical SEO for Improved Accessibility WTS FESTBillieHyde
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNeo4j
 
20140402 - Smart house demo kit
20140402 - Smart house demo kit20140402 - Smart house demo kit
20140402 - Smart house demo kitJamie (Taka) Wang
 
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdfQ4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdfTejal81
 

Último (20)

TrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
 
The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)
 
LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0
 
Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechWebinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
 
UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4
 
Top 10 Squarespace Development Companies
Top 10 Squarespace Development CompaniesTop 10 Squarespace Development Companies
Top 10 Squarespace Development Companies
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)
 
March Patch Tuesday
March Patch TuesdayMarch Patch Tuesday
March Patch Tuesday
 
UiPath Studio Web workshop series - Day 1
UiPath Studio Web workshop series  - Day 1UiPath Studio Web workshop series  - Day 1
UiPath Studio Web workshop series - Day 1
 
2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
 
UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2
 
AI Workshops at Computers In Libraries 2024
AI Workshops at Computers In Libraries 2024AI Workshops at Computers In Libraries 2024
AI Workshops at Computers In Libraries 2024
 
Scenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosScenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenarios
 
Technical SEO for Improved Accessibility WTS FEST
Technical SEO for Improved Accessibility  WTS FESTTechnical SEO for Improved Accessibility  WTS FEST
Technical SEO for Improved Accessibility WTS FEST
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4j
 
20140402 - Smart house demo kit
20140402 - Smart house demo kit20140402 - Smart house demo kit
20140402 - Smart house demo kit
 
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdfQ4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
 

Tools for developing Android Games

  • 1. Tools for Android Games Raul Portales @sla_shalafi @thepilltree raul@plattysoft.com http://thepilltree.com
  • 2. Summary ● Introduction to game development ● Engines ● AndEngine ● jPCT-AE ● Scores / Achievements ● Monetization systems
  • 3. Game Architecture (Simplified) Game Engine Draw Thread Game Objects Update Thread
  • 4. Performance Tips ● Avoid object creations ● Use pools and pre create them ● Avoid getters and setters ● Public attributes instead ● Avoid collections ● Avoid interfaces ● Use a single Activity
  • 5. Why use OpenGL? Performance
  • 6. Why use OpenGL? Performance
  • 7. Why use any Engine You don’t want to start from scratch
  • 9. AndEngine ● http://www.andengine.org/ ● 2D Graphics Engine ● LGPL ● Extensions ● Physics Engine (Box2D) ● Live Wallpapers ● etc
  • 10. Games built with AndEngine ● Chalk Ball ● Bunny Shooter ● Greedy Spiders ● Wheelz ● Farm Tower ● ...
  • 11. Games built with AndEngine
  • 12. Project setup ● Put the jar under libs ● Add them to the build path ● Don’t forget “armeabi” ● Get the source ● Import project ● Create res dir
  • 13. Concepts ● Engine ● Scene ● Sprites + Handlers ● Texture / Texture Atlas ● Sprite ● Body ● Fixture
  • 14. Game Architecture / AndEngine Game Engine Draw Thread Game Objects Update Thread Scene UpdateHandler Sprites
  • 15. Activity creation flow ● BaseGameActivity ● onLoadEngine ● onLoadResources ● onLoadScene ● onLoadComplete
  • 16. Creating the Engine (1/2) public Engine onLoadEngine() { DisplayMetrics om = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(om); camWidth = 480; camHeight = (int) (om.heightPixels*480f / om.widthPixels); RatioResolutionPolicy rrp = new RatioResolutionPolicy(camWidth, camHeight); Camera camera = new Camera(0, 0, camWidth, camHeight);
  • 17. Creating the Engine (2/2) EngineOptions options = new EngineOptions(true, ScreenOrientation.LANDSCAPE, rrp, camera); options.getRenderOptions() .disableExtensionVertexBufferObjects(); return new Engine(options); }
  • 18. Loading Resources public void onLoadResources() { BitmapTextureAtlas bitmapTextureAtlas = new BitmapTextureAtlas(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); mBoxTextureRegion = BitmapTextureAtlasTextureRegionFactory .createFromAsset(bitmapTextureAtlas, this, "box_icon.png", 0, 0); mEngine.getTextureManager() .loadTexture(bitmapTextureAtlas); }
  • 19. Texture Atlas ● Quite a pain for AndEngine ● Built by hand ● Size must be a power of 2 ● One big or many small ones?
  • 20. Creating the Scene (1/3) public Scene onLoadScene() { Scene scene = new Scene(); PhysicsWorld physicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false); Shape ground = new Rectangle(0, camHeight - 2, camWidth, 2); FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f); PhysicsFactory.createBoxBody(physicsWorld, ground, BodyType.StaticBody, wallFixtureDef); scene.attachChild(ground);
  • 21. Creating the Scene (2/3) Sprite box = new Sprite(0, 0, mBoxTextureRegion); FixtureDef boxFixture = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f); Body boxBody = PhysicsFactory.createBoxBody(physicsWorld, box, BodyType.DynamicBody, boxFixture); physicsWorld.registerPhysicsConnector(new PhysicsConnector(box, boxBody, true, true)); scene.attachChild(box);
  • 22. Creating the Scene (3/3) scene.registerUpdateHandler(physicsWorld); scene.registerUpdateHandler(mUpdateHandler); return scene; }
  • 23. Types of bodies ● Dynamic ● It is affected by physics like gravity ● Kinematic ● It moves in a specified way ● Static ● It does not move
  • 24. More Interesting things ● TiledTextures / Animated Sprites ● Animations ● Sound Engine ● Particle Systems ● Collision Detect ● Polygonal Bodies ● Menus
  • 25. Intermission ← AndEngine Example apk
  • 27. jPCT-AE ● http://www.jpct.net/jpct-ae/ ● 3D Engine ● 3DObjects ● Lights ● etc ● No physics ● It has collision detection
  • 28. Games built with jPCT-AE ● SpaceCat ● SkyFrontier ● Forgotten Elements ● Mobialia Chess ● Freddy Budgett ● Alien Runner ● ...
  • 29. Games built with jPCT-AE
  • 30. Project setup Add jpct-ae.jar to libs / Build path
  • 31. Concepts / Classes ● Renderer / FrameBuffer ● World ● Texture / TextureManager ● Object3D ● Light ● Camera
  • 32. Game Architecture / jPCT-AE Game Engine Draw Thread Game Objects Update Thread Renderer World 3DObject
  • 33. Preparing the GLSurfaceView mGlView = (GLSurfaceView) findViewById(R.id.glview); mGlView.setKeepScreenOn(true); mViewRenderer = new MyRenderer(mGlView, mWorld); mGlView.setRenderer(mViewRenderer);
  • 34. Renderer setup public void onDrawFrame(GL10 gl) { buffer.clear(back); synchronized (mWorld) { mWorld.renderScene(buffer); mWorld.draw(buffer); } buffer.display(); }
  • 35. Setup the World mWorld = new World(); mWorld.setAmbientLight(150, 150, 150);
  • 36. Loading Textures Resources res = getResources(); Texture texture = new Texture(res.getDrawable(R.raw.texture)); TextureManager.getInstance() .addTexture("texture", texture);
  • 37. Loading Objects mModel = Loader.load3DS(getResources() .openRawResource(R.raw.model), 1)[0]; mModel.setTexture("texture"); mWorld.addObject(mModel); mWorld.buildAllObjects();
  • 38. Creating Lights Light sun = new Light(mWorld); sun.setIntensity(250, 250, 250); SimpleVector sv = new SimpleVector(0, -100, -100); sun.setPosition(sv);
  • 39. Handling the camera Camera cam = mWorld.getCamera(); cam.setPosition(new SimpleVector(0, 0,-100)); cam.lookAt(mModel.getTransformedCenter());
  • 40. More about the camera ● It has a position ● Camera.setPosition ● It has a target ● Camera.lookAt ● It has a rotation ● Camera.setRotation
  • 42. Operations with objects ● Hierarchy ● addChild ● Move ● setPosition / translate ● Rotation ● rotateX, rotateY, rotateZ
  • 43. More Interesting Things ● Keyframe Animations ● Collision detect (Ellipsoids) ● Billboards ● Transparency ● Culling ● Primitive Objects
  • 44. And a workaround ● Overlay native layouts ● Menus ● Dialogs
  • 45. Another Intermission ← jPCT-AE Example apk
  • 46. Bonus: Other Engines ● PlayN ● https://developers.google.com/playn/ ● NME ● http://www.haxenme.org/ ● Unity ● http://unity3d.com/ ● Game Maker ● http://www.yoyogames.com/make
  • 48. Why use a Library? ● Not reinventing the wheel ● It is proven that works ● Familiarity for users ● Other games use them ● You do not own the servers ● You don’t, and that is good
  • 49. Available libraries ● ScoreLoop ● OpenFeint
  • 50. What do you get? ● Achievements ● Not very impressive ● Leaderboards ● That is interesting ● News Feed ● Friends management ● Improved engagement
  • 51. Easy to integrate ● Android Library Project ● Initialize with the Application ● Open a specific screen ● 2 lines of code ● Submit a score or achievement ● 2 lines of code
  • 52. Monetization Too much to say for a single slide
  • 53. And now... ● Lunch ● Pitch your game idea ● Gather a team ● Hackaton ● Demos, Pizza & Beer
  • 54. Tools for Android Games Raul Portales @sla_shalafi @thepilltree raul@plattysoft.com http://thepilltree.com