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!
GETTING COCOS2D - PART 2 1. Clone the Git Repository 2. Install the Templates
XCODE TEMPLATES• New Project -> Cocos2D Templates
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, ...
COCOS2D ESSENTIALS• 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 ...
LAYERS AND SCENES CCLayer CCScene Gameplay GameplayCCSprite(s) Scene CCLayer Background
LAYERS AND TOUCHAccelerometer CCLayer CCScene CCLayer Gameplay Scene CCLayer Touch
COCOS2D ACTIONS• Actionsare 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
COCOS2D+BOX2D ESSENTIALS 2• Box2D is C++• 2Drigid physics simulation engine with continuous collision detection• All your ﬁles that touch C++ or include it must be Objective-C++ (.mm)• Tuned for 1 meter sized objects!• Use a ﬁxed time step!
STEP 1• Attach the director to the AppDelegatewindow = [[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
STEP 2• init()• createPhysicsWorld• debug draw• ground body
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);