4. Why might one
choose Box2D?
‣Larger Community
‣More Examples
‣Continuous Collisions ("Bullets")
‣Good Enough for Angry Birds
5. Why Chipmunk?
‣ C w/Objective-C* instead of C++
‣ //I *HATE* C++
*Objective-C Wrapper requires $89 indie license, C is MIT licensed/Free
6. Why Chipmunk?
‣ C w/Objective-C* instead of C++
‣ //I *HATE* C++
‣ Global (Space) Origin in the same
place as UIView
‣(Seems different for Box2D)
*Objective-C Wrapper requires $89 indie license, C is MIT licensed/Free
7. Why Chipmunk?
‣ C w/Objective-C* instead of C++
‣ //I *HATE* C++
‣ Global (Space) Origin in the same
place as UIView
‣(Seems different for Box2D)
‣ Units in pixels instead of meters
*Objective-C Wrapper requires $89 indie license, C is MIT licensed/Free
8. Why Chipmunk?
‣ C w/Objective-C* instead of C++
‣ //I *HATE* C++
‣ Global (Space) Origin in the same
place as UIView
‣(Seems different for Box2D)
‣ Units in pixels instead of meters
‣ Box2D: body->DoThing(&shapeObject)
‣ //I find that annoying
*Objective-C Wrapper requires $89 indie license, C is MIT licensed/Free
9. Why Chipmunk?
‣ C w/Objective-C* instead of C++
‣ //I *HATE* C++
‣ Global (Space) Origin in the same
place as UIView
‣(Seems different for Box2D)
‣ Units in pixels instead of meters
‣ Box2D: body->DoThing(&shapeObject)
‣ //I find that annoying
*Objective-C Wrapper requires $89 indie license, C is MIT licensed/Free
See http://www.cocoanetics.com/2010/05/physics-101-uikit-app-with-box2d-for-gravity/ for
Box2D code
10. What about
Cocos2D?
‣ Cocos2D is a Gaming Framework
‣ Uses Sprites/Scenes (kinda like Views)
‣ Integrates Either Box2D or Chipmunk
11. What about
Cocos2D?
‣ Cocos2D is a Gaming Framework
‣ Uses Sprites/Scenes (kinda like Views)
‣ Integrates Either Box2D or Chipmunk
‣ Still need to deal with Physics Engine
12. What about
Cocos2D?
‣ Cocos2D is a Gaming Framework
‣ Uses Sprites/Scenes (kinda like Views)
‣ Integrates Either Box2D or Chipmunk
‣ Still need to deal with Physics Engine
‣ Might as well learn Physics w/UIKit
13. What about
Cocos2D?
‣ Cocos2D is a Gaming Framework
‣ Uses Sprites/Scenes (kinda like Views)
‣ Integrates Either Box2D or Chipmunk
‣ Still need to deal with Physics Engine
‣ Might as well learn Physics w/UIKit
‣ Cocos2D + Physics Way too long a talk
16. Integrating
Chipmunk with
UIKit
‣Create Space
‣Create Body+shape for UIView
‣Iterate Space
17. Integrating
Chipmunk with
UIKit
‣Create Space
‣Create Body+shape for UIView
‣Iterate Space
‣Reset Frame Coordinates
‣ Happens Third, but we'll talk about it Last
20. Space Parameters
‣ Bounds
‣ Walls around the Space that things bounce off of
‣ Elasticity
‣ "Bounciness"
21. Space Parameters
‣ Bounds
‣ Walls around the Space that things bounce off of
‣ Elasticity
‣ "Bounciness"
‣ Friction
22. Space Parameters
‣ Bounds
‣ Walls around the Space that things bounce off of
‣ Elasticity
‣ "Bounciness"
‣ Friction
‣ Layers/Group/CollisionType
‣ Think "Collision Filters"
‣ Allow for "Friendly Fire" type scenarios
23. Space Parameters
‣ Bounds
‣ Walls around the Space that things bounce off of
‣ Elasticity
‣ "Bounciness"
‣ Friction
‣ Layers/Group/CollisionType
‣ Think "Collision Filters"
‣ Allow for "Friendly Fire" type scenarios
‣ Gravity
28. Display Link
‣ Calls a method on every screen refresh
‣ Used to update Motion/Position
‣ Can be set to every N frames
29. [Space Step]
‣ Tell the physics simulator to advance by
a given timestep
‣ Simple multiplication here
‣ Using an accumulator is more accurate
‣ See: http://gafferongames.com/game-physics/fix-
your-timestep/
30. setTransform
‣ Chipmunk creates an AffineTransform
for each body on each step
‣ Use that value to set the "transform"
property of the UIView
31. What the @#$% is
a Transform?
‣ Remember Matrix Math?
‣ Yeah, I didn't think so
‣ It's a Mathematical representation (matrix)
that's used to describe Position and
Rotation of an object
‣ You don't have to understand them to use
them
‣ Though it helps when debugging
‣ See http://iphonedevelopment.blogspot.com/2008/10/
demystifying-cgaffinetransform.html for more
32. Reset Frame
body.pos = cpv(view.center.x,view.center.y);
//Reset the frame to the origin and set the Transform
// to move the object back to where the frame had it
view.center=CGPointMake(0.0f, 0.0f);
view.transform=CGAffineTransformMakeTranslation(body.pos.x,
body.pos.y);
34. Wait, What?
‣Think of it like This:
‣ You can EITHER use a Frame OR a Transform
to Position views
‣ NEVER BOTH
‣ IF you set both, they interact with each
other in weird ways
35. Wait, What?
‣Think of it like This:
‣ You can EITHER use a Frame OR a Transform
to Position views
‣ NEVER BOTH
‣ IF you set both, they interact with each
other in weird ways
‣ To Switch: set one to Origin and then set the
other to the same place
36. Wait, What?
‣Think of it like This:
‣ You can EITHER use a Frame OR a Transform
to Position views
‣ NEVER BOTH
‣ IF you set both, they interact with each
other in weird ways
‣ To Switch: set one to Origin and then set the
other to the same place
‣ Happens fast enough, hard to notice
‣ You can Hide or remove subview first if it's noticeable
37. Now we're set up
Not much of a game so far.
Now What?
39. Joints &
Constraints
‣ "Build House to shoot Birds at"
‣ "Hook up Spring to Slingshot"
‣ [Space addConstraint:...]
‣ http://www.youtube.com/watch?v=ZgJJZTS0aMM