BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games...

32
COCOS2D + BOX2D Creating physics game in 1 hour

Transcript of BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games...

Page 1: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

COCOS2D + BOX2DCreating physics game in 1 hour

Page 2: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

WHO IS ROD?

• Founder of Prop Group www.prop.gr

• Background in enterprise software, now iPhone+iPad games!

• 2D physics game, Payload in the AppStore

Page 3: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

In Progress...

www.cocos2dbook.com

Page 4: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

SNOWBALL TOSS!

Page 5: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

WHY COCOS2D

• Games are fun! Making a game does not have to be hard.

• Write less infrastructure code, spend more time on design and core gameplay

• OpenGL ES rendering and performance without having to learn OpenGL ES to get started

• It is free!

Page 6: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

GETTING COCOS2D

http://github.com/cocos2d/cocos2d-iphone

Page 7: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

GETTING COCOS2D - PART 2

1. Clone the Git Repository2. Install the Templates

Page 8: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

XCODE TEMPLATES

• New Project -> Cocos2D Templates

Page 9: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

COCOS2D

• Objective-C framework for games

• Scene Management, Textures, Audio

• Everything but the kitchen sink (3D stuff)*

• OpenGL ES rendering and optimizations, Actions, Tile Maps, Parallax Scrolling, Scheduler, High Score service, ...

Page 10: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

COCOS2DESSENTIALS

• Your game is divided into scenes, scenes into layers

• Layers have what you care about, the Sprites

• Director is used to switch between scenes

• Everything uses the CC namespace, so layers are CCLayers, CCScenes, CCSprites ...

Page 11: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

LAYERS AND SCENES

CCSprite(s)

Background

CCLayer

GameplayScene

CCSceneGameplay

CCLayer

Page 12: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

LAYERS AND TOUCHAccelerometer

GameplayScene

CCLayer

CCScene

CCLayer

CCLayer

Touch

Page 13: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

MULTIPLE SCENES

GameplayScene

CCLayer

CCScene

CCLayer

CCLayer

Level Completed

SceneCCLayer

CCScene

CCLayer

CCLayerDirector

CCScene

Page 14: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

COCOS2DACTIONS

• Actions are an easy way to apply transitions, effects, and animations to your sprites

• MoveTo, MoveBy, ScaleBy, ScaleTo, FadeIn, FadeOut ...CCAction *moveAction = [CCMoveBy actionWithDuration:2.0f

position:CGPointMake(50.0f,0.0f)];[playerSprite runAction:moveAction];

2 seconds

Page 15: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

COCOS2D+BOX2DESSENTIALS 2

• Box2D is C++

• 2D rigid physics simulation engine with continuous collision detection

• All your files that touch C++ or include it must be Objective-C++ (.mm)

• Tuned for 1 meter sized objects!

• Use a fixed time step!

Page 16: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

A GAME IN 7 STEPS

• Let’s begin

Page 17: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

STEP 1

• Attach the director to the AppDelegate

window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];[window setUserInteractionEnabled:YES];!// cocos2d will inherit these values[window setMultipleTouchEnabled:YES]; // cocos2d will inherit these values// create an openGL view inside a window[[CCDirector sharedDirector] attachInView:window];![window makeKeyAndVisible];! !

• Director Options

Page 18: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

STEP 2

• init()

• createPhysicsWorld

• debug draw

• ground body

Page 19: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

INIT()-(id)init {

! if ((self=[super init])) {! ! CGSize screenSize = [CCDirector sharedDirector].winSize;! !! ! // enable touches! ! self.isTouchEnabled = YES;! ! // enable accelerometer! ! self.isAccelerometerEnabled = YES;! !! ! [self createPhysicsWorld];! !! ! [self addNewBodyWithCoords:ccp((screenSize.width/2)+80.0f, screenSize.height/2) ! ! ! ! ! withDimensions:ccp(1.0f,0.5f) ! ! ! ! ! ! andDensity:3.0f ! ! ! ! ! andWithSprite:ICE_BLOCK_FILENAME_1];! !! ! // Start the scheduler to call the tick function! ! [self schedule: @selector(tick:)];! }! return self;}

Page 20: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

CREATEPHYSICSWORLD()// Define the gravity vector.

! b2Vec2 gravity;! gravity.Set(0.0f, -10.0f);!! // Do we want to let bodies sleep?! // This will speed up the physics simulation! bool doSleep = true;!! // Construct a world object, which will hold and simulate the rigid bodies.! world = new b2World(gravity, doSleep);!! world->SetContinuousPhysics(true); b2BodyDef groundBodyDef;! groundBodyDef.position.Set(0, 0); // bottom-left corner!! // Call the body factory which allocates memory for the ground body! // from a pool and creates the ground box shape (also from a pool).! // The body is also added to the world.! b2Body* groundBody = world->CreateBody(&groundBodyDef); b2PolygonShape groundBox;! !!! // bottom! groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(screenSize.width/PTM_RATIO,0));! groundBody->CreateFixture(&groundBox);

Page 21: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

STEP 3

• Create the dynamic blocks

Page 22: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

CODE+DEMOPhysics World + Dynamic Blocks

Page 23: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

STEP 4

• Touch Events

Page 24: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

CODE+DEMOTouch Events Demo

Page 25: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

STEP 5

• Time to add graphics!

Page 26: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

GRAPHICS DETAILS

• Background Layer

• Sprites for the static shapes

• Sprites for the snowballs

• Penguin animation

• Instructions Layer

Page 27: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

STEP 6

Let it snow! - Fun with Particle Systems

Page 28: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

STEP 7

Pump up the volume!

Page 29: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

CLOSING THOUGHTS

• Sample Code != Production Code

• Cocos2d Website:

http://www.cocos2d-iphone.org/

Look at the sample tests included with Cocos2D!

Page 30: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

THANK YOU

[email protected]

• twitter.com/rodstrougo

• www.prop.gr

• www.cocos2dbook.com

Page 31: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

EXTRAS

• SpriteSheets

• Creating Physics Models

• Collision detection

• Accelerometer Filters

• Multi-touch handling

Page 32: BOX2D - Cocos2D Bookcocos2dbook.com/projects/Rod_Cocos2D_Presentation.pdf · WHY COCOS2D • Games are fun! Making a game does not have to be hard. • Write less infrastructure code,

HOW-TO PHYSICS MODELS

• VertexHelper & Mekanimo

http://github.com/jfahrenkrug/VertexHelper

http://www.mekanimo.net/

• Ricardo’s LevelSVG

http://www.sapusmedia.com/levelsvg/