for fun and profit
play

for Fun and Profit Lu Guanqun Intel Corporation Why? The market - PowerPoint PPT Presentation

Write Your Angry Bird Game on Tizen for Fun and Profit Lu Guanqun Intel Corporation Why? The market is big! 3 Famous games apps 4 Playing games is fun. Developing a game is more fun. 5 How? Native app vs Web app


  1. Write Your “Angry Bird” Game on Tizen for Fun and Profit Lu Guanqun Intel Corporation

  2. Why?

  3. The market is big! 3

  4. Famous games apps 4

  5. • Playing games is fun. • Developing a game is more fun. 5

  6. How?

  7. Native app vs Web app • Tizen now DOES support the native application development. • Web is the future and it’s cross platform by its nature. • So a web game app(HTML5) in this talk. 7

  8. So how to develop a web game app? 8

  9. If you’re brave enough… • Write it by yourself from scratch • Javascript (CoffeeScript, TypeScript etc) • Canvas(SVG)/WebGL • WebAudio 9

  10. Basic Game Loop Read Input Move Collision Test Render 10

  11. Use a Game Engine • There are many choices, and I choose… 11

  12. Use a Game Engine • cocos2d-html5 12

  13. A bit history about cocos2d • Cocos2d • Cocos2d for iphone • Cocos2d-x • Cocos2d-html5 13

  14. Basic Workflow Winning scene Intro Menu Level1 Cutscene Level2 Losing scene Score board 14

  15. Basic Concepts 15

  16. Some samples of code var GameLayer = cc.Layer.extend({ init:function() { this._super(); var sprite = cc.Sprite.create(s_name); sprite.setPosition(cc.p(100, 100)); this.addChild(sprite); } }) var MainScene = cc.Scene.extend({ onEnter:function () { this._super(); var layer = new GameLayer(); // create a CCLayer this.addChild(layer); layer.init(); } }) 16

  17. 2D Physics Engine – Box2D • Developed in C++ at first by Erin Catto • Then have lots of language ports. • We would use javascript version. 17

  18. Basic Concepts in Box2D • “World” – manages the whole physics simulation. • “Body” – primary element in Box2D world. • “Shape” – all the collision geometry attached to a body. • “Fixture” – attach a shape to a body, sets density, friction and restitution. • “Joint” – connection between two bodies. 18

  19. Unit • Box2D uses KMS unit system. • Kilograms • Meters (not pixels) • Seconds 19

  20. Let’s see some code: // create the world world = new b2World(new b2Vec2(0, -10), // gravity vector • Emphasize with blue or green color from “ Theme Colors ” only true); // allowing sleeping bodies • Initial caps for titles and sentence case for bullets // create FixtureDef var fixDef = new b2FixtureDef; • fixDef.density = 1.0; Follow the guidance for bulleted lists on the following page fixDef.friction = 0.5; fixDef.restitution = 0.2; // create a ground body var bodyDef = new b2BodyDef; bodyDef.type = b2Body.b2_staticBody; fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsBox(20, 2); // size (half width/height as the argument) bodyDef.position.Set(10, -1.8); world.CreateBody(bodyDef).CreateFixture(fixDef); 20

  21. Create a dynamic box var bodyDef = new b2BodyDef(); bodyDef.type = b2Body.b2_dynamicBody; // specify the dynamic body here! • Emphasize with blue or green color from “ Theme Colors ” only bodyDef.position.Set(p.x / PTM_RATIO, p.y / PTM_RATIO); bodyDef.userData = sprite; // link Box2D to our sprite • var body = world.CreateBody(bodyDef); Initial caps for titles and sentence case for bullets var dynamicBox = new b2PolygonShape(); • dynamicBox.SetAsBox(0.5, 0.5); //1m box Follow the guidance for bulleted lists on the following page // Define the dynamic body fixture. var fixtureDef = new b2FixtureDef(); fixtureDef.shape = dynamicBox; fixtureDef.density = 1.0; fixtureDef.friction = 0.3; body.CreateFixture(fixtureDef); 21

  22. Draw the objects from Box2D update:function (dt) { var velocityIterations = 8; • Emphasize with blue or green color from “ Theme Colors ” only var positionIterations = 1; • // Instruct the world to perform a single step of simulation. It is Initial caps for titles and sentence case for bullets // generally best to keep the time step and iterations fixed. this.world.Step(dt, velocityIterations, positionIterations); • Follow the guidance for bulleted lists on the following page //Iterate over the bodies in the physics world for (var b = this.world.GetBodyList(); b; b = b.GetNext()) { if (b.GetUserData() != null) { var myActor = b.GetUserData(); myActor.setPosition(cc.p(b.GetPosition().x * PTM_RATIO, b.GetPosition().y * PTM_RATIO)); myActor.setRotation(-1 * cc.RADIANS_TO_DEGREES(b.GetAngle())); } } } 22

  23. Classic Box2D Demo 23

  24. To make it more like Angry Bird, we need: • A place to shoot the bird • Some blocks, wood, house • The monsters 24

  25. My “Angry Bird” Demo 25

  26. More… • Sound effects • Shiny graphics ( I need an artist! ) 26

  27. Profits Part • Sell it on Tizen app store • Add some ads • In App Purpose 27

  28. References: • https://github.com/cocos2d/cocos2d-html5 • http://box2d-js.sourceforge.net/ • http://blog.flurry.com/bid/95723/Flurry-Five-Year-Report-It-s-an- App-World-The-Just-Web-Lives-in-It • http://xkcd.com/724/ • http://www.cocos2d- iphone.org/wiki/doku.php/prog_guide:basic_concepts 28

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend