Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iPhone game programming with Cocos2D
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Christian Stigen Larsen
October 11, 2011
0
110
iPhone game programming with Cocos2D
Norwegian presentation at Bouvet on iPhone game programming using Cocos2D and physics engines.
Christian Stigen Larsen
October 11, 2011
Tweet
Share
More Decks by Christian Stigen Larsen
See All by Christian Stigen Larsen
Writing a basic x86-64 JIT compiler from scratch in stock Python
csl
0
360
The Busy Beaver Game
csl
0
890
How to make a simple virtual machine
csl
1
1.3k
Interpreting DNA with Python
csl
2
230
R⁷RS Scheme
csl
0
410
The Mace Model Checker
csl
0
120
Bootstrap, LeSS and CoffeeScript
csl
0
89
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
Documentation Writing (for coders)
carmenintech
77
5.3k
Code Review Best Practice
trishagee
74
20k
Paper Plane (Part 1)
katiecoart
PRO
0
4.3k
Building the Perfect Custom Keyboard
takai
2
690
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
190
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
180
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
280
Transcript
iPhone spillutvikling med Christian Stigen Larsen, CODE
None
None
None
None
None
None
None
None
None
None
None
• iOS
• iOS • Cocos2D + fysikkmotorer
• iOS • Cocos2D + fysikkmotorer • Spill i Objective-C
iOS
iOS Devices
iOS Devices
iOS Devices
iOS Devices
iOS SDK
iOS SDK Core OS
iOS SDK Core OS Core Services
iOS SDK Core OS Core Services Media Layer
iOS SDK Core OS Core Services Media Layer Cocoa Touch
iOS SDK Cocos2D Core OS Core Services Media Layer Cocoa
Touch
Cocos2D konsepter
Cocos2D konsepter • Sprites + actions
Cocos2D konsepter • Sprites + actions • Layers
Cocos2D konsepter • Sprites + actions • Layers • Scenes
Cocos2D konsepter • Sprites + actions • Layers • Scenes
• Director
Cocos2D konsepter • Sprites + actions • Layers • Scenes
• Director • Fysikkmotor
Sprites
Sprites
Sprites
Sprites
Sprites
Sprites
Sprites
Sprites
Sprites
Sprites
Sprites
Layers
Layers
Layers
Layers
Layers
Layers
Layers
Layers
Layers
Layers
Layers
Layers
Layers
Layers
Layers
Scenes
Scenes Hovedmeny
Scenes Hovedmeny Level 1 ... n
Scenes Hovedmeny Level 1 ... n Game Over
Director Hovedmeny Level 1 ... n Game Over
Director Hovedmeny Level 1 ... n Game Over
Director Hovedmeny Level 1 ... n Game Over
Director Hovedmeny Level 1 ... n Game Over
Fysikkmotor
Fysikkmotor • Chipmunk
Fysikkmotor • Chipmunk • Box2D
None
None
Objective-C
Objective-C Krasjkurs
Objective-C Krasjkurs
Objective-C Krasjkurs • C + Smalltalk
Objective-C Krasjkurs • C + Smalltalk • Reference counting
Objective-C Krasjkurs • C + Smalltalk • Reference counting •
Xcode og llvm
Metodekall Krasjkurs
Metodekall Krasjkurs [objekt metodeNavn];
Metodekall Krasjkurs [objekt metodeNavn];
Metodekall Krasjkurs [objekt metodeNavn]; [objekt metodeNavn:param1];
Metodekall Krasjkurs [objekt metodeNavn]; [objekt metodeNavn:param1]; [sprite showInLayer:layer1 x:100 y:200
scaleBy:2.0f];
Instansiering Krasjkurs
Instansiering Krasjkurs Bird *b = [[Bird alloc] initWithSpeed:speed andSprite:sprite];
Instansiering Krasjkurs Bird *b = [[Bird alloc] initWithSpeed:speed andSprite:sprite];
Instansiering Krasjkurs Bird *b = [[Bird alloc] init];WithSpeed:speed andSprite:sprite];
Instansiering Krasjkurs Bird *b = [[Bird alloc] initWithSpeed:speed andSprite:sprite];
Instansiering Krasjkurs Bird *b = [[Bird alloc] initWithSpeed:speed andSprite:sprite]; [b
release];
Klasser Krasjkurs
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; -(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; -(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; -(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; -(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; -(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; -(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; -(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; -(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; -(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; -(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Klasser Krasjkurs @interface Bird : NSObject { @public CCSprite *sprite;
float speed; } -(CCSprite*) getSprite; +(float) getSpeed; -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s; @end
Implementasjon Krasjkurs
Implementasjon Krasjkurs @implementation Bird -(CCSprite*) getSprite { return sprite; }
@end
Implementasjon Krasjkurs @implementation Bird -(CCSprite*) getSprite { return sprite; }
@end
Implementasjon Krasjkurs @implementation Bird -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s { self =
[super init]; if ( self ) { speed = v; sprite = s; } return self; } @end
Implementasjon Krasjkurs @implementation Bird -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s { self =
[super init]; if ( self ) { speed = v; sprite = s; } return self; } @end
Implementasjon Krasjkurs @implementation Bird -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s { self =
[super init]; if ( self ) { speed = v; sprite = s; } return self; } @end
Implementasjon Krasjkurs @implementation Bird -(Bird*) initWithSpeed:(float)v andSprite:(CCSprite*)s { self =
[super init]; if ( self ) { speed = v; sprite = s; } return self; } @end
BumblePop
BumblePop
Startup av app
Startup av app iOS
Startup av app - (void) applicationDidFinishLaunching:(UIApplication*)app iOS
Startup av app - (void) applicationDidFinishLaunching:(UIApplication*)app
Startup av app - (void) applicationDidFinishLaunching:(UIApplication*)app { window = [[UIWindow
alloc] initWithFrame:/* ... */]; // ... CCDirector *director = [CCDirector sharedDirector]; [director setAnimationInterval:1.0/60]; [director setDisplayFPS:YES]; // ... [[CCDirector sharedDirector] runWithScene:[HelloWorldLayer scene]]; } - (void) applicationDidFinishLaunching:(UIApplication*)app
Startup av app - (void) applicationDidFinishLaunching:(UIApplication*)app { window = [[UIWindow
alloc] initWithFrame:/* ... */]; // ... CCDirector *director = [CCDirector sharedDirector]; [director setAnimationInterval:1.0/60]; [director setDisplayFPS:YES]; // ... [[CCDirector sharedDirector] runWithScene:[HelloWorldLayer scene]]; } - (void) applicationDidFinishLaunching:(UIApplication*)app
Startup av layer
Startup av layer -(id) init { if ( (self=[super init])
) { game = [[Game alloc] init]; [self schedule:@selector(nextFrame:)]; CCSprite *bee = [CCSprite spriteWithFile: @"BumbleBee40.png"]; [self addChild:bee]; // ... }
Startup av layer -(id) init { if ( (self=[super init])
) { game = [[Game alloc] init]; [self schedule:@selector(nextFrame:)]; CCSprite *bee = [CCSprite spriteWithFile: @"BumbleBee40.png"]; [self addChild:bee]; // ... }
Startup av layer -(id) init { if ( (self=[super init])
) { game = [[Game alloc] init]; [self schedule:@selector(nextFrame:)]; CCSprite *bee = [CCSprite spriteWithFile: @"BumbleBee40.png"]; [self addChild:bee]; // ... }
Startup av layer -(id) init { if ( (self=[super init])
) { game = [[Game alloc] init]; [self schedule:@selector(nextFrame:)]; CCSprite *bee = [CCSprite spriteWithFile: @"BumbleBee40.png"]; [self addChild:bee]; // ... }
Startup av layer CCLabelTTF *score; score = [CCLabelTTF labelWithString:@"Score: ?"
fontName:@"Marker Felt" fontSize:22];
Neste bilde -(void) draw { // Kun TEGNING, ingen oppdatering
av state } - (void) nextFrame:(ccTime)dt { // Kun oppdatering av STATE }
Bevegelse
Bevegelse cloud.position = ccp( cloud.position.x - 10*dt, cloud.position.y);
Bevegelse cloud.position = ccp( cloud.position.x - 10*dt, cloud.position.y); -10 px/sec
Touch
Touch - (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event { CGPoint location =
[self convertTouchToNodeSpace: touch]; beeDestination = location; }
Målbevegelse
Målbevegelse [self moveTowards:bee :&beeDestination :2*dt]; - (void) moveTowards: (CCSprite*)from: (CGPoint*)to:
(float)amount { float dx = to->x - from.position.x; float dy = to->y - from.position.y; dx *= amount; dy *= amount; from.position = ccp(from.position.x + dx, from.position.y + dy); }
Målbevegelse [self moveTowards:bee :&beeDestination :2*dt]; - (void) moveTowards: (CCSprite*)from: (CGPoint*)to:
(float)amount { float dx = to->x - from.position.x; float dy = to->y - from.position.y; dx *= amount; dy *= amount; from.position = ccp(from.position.x + dx, from.position.y + dy); }
Målbevegelse [self moveTowards:bee :&beeDestination :2*dt]; - (void) moveTowards: (CCSprite*)from: (CGPoint*)to:
(float)amount { [from runAction: [CCMoveTo actionWithDuration:1.0f position:*to]]; }
Fugler
Fugler // Move ALL birds with their given speed for
( Bird *p in birds ) [self moveTowards:p->sprite :&beeDestination :p->speed*dt];
Kollisjon
Kollisjon -(void) beeHitBy:(CCSprite*)bird { CGRect beeBox = [bee boundingBox]; CGRect
birdBox = [bird boundingBox]; if ( CGRectIntersectsRect(beeBox, birdBox) ) [self killBee]; }
None
None
Oppsummering • iOS • Cocos2D + fysikkmotorer • Spill i
Objective-C
Takk!