# рдлреЗрдкреНрд▓реЗрдмрд░реНрдб - рдФрд░ рдпрд╣ рдмрд╛рдд рд╣реИ!

рдпрд╣ рдЦрд┐рд▓реМрдирд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ 90 рдХреЗ рджрд╢рдХ рдХреЗ рдЦреЗрд▓ рдореЗрдВ рдордиреЛрд░рдВрдЬрди рдФрд░ рдЖрдХреНрд░реЛрд╢ рдХрд╛ рдПрдХ рдареЛрд╕ рдорд┐рд╢реНрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреИрд╕реЗ рдбрдмрд▓ рдбреНрд░реИрдЧрди 3, рдФрд░ рдХрд┐рд╢реЛрд░ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддреА рдирд┐рдВрдЬрд╛ рдХрдЫреБрдПред
рджрд╛рдВрдЧ рдЧреБрдпреЗрди рдиреЗ рдШреЛрд╖рдгрд╛ рдХреА рдХрд┐ рд╡рд╣ рдЧреЗрдо рдХреЛ рдРрдк рд╕реНрдЯреЛрд░ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдХрд┐ рдирдП iOS7 рднреМрддрд┐рдХреА рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреМрддрд┐рдХреА рдФрд░ рдмрд╛рддрдЪреАрдд рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рд▓реЗрдЦ рдЗрд╕рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ iOS 7 рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рднреМрддрд┐рдХреА рдЗрдВрдЬрди рд╣реИ - UIKit Dynamicsред
1. рдЭреВрд▓реЗ
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рддреАрди рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рдЯрдЪ рдЬреЗрд╕реНрдЪрд░ рдкрд╣рдЪрд╛рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTapGesture:)]; [self.view addGestureRecognizer:singleTapGestureRecognizer]; [singleTapGestureRecognizer setNumberOfTapsRequired:1];
рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ "рдкрдХреНрд╖реА" рд▓рд╣рд░ рдмрдирд╛рдирд╛ рд╣реИред рдПрдХ рдирд┐рд░рдВрддрд░ рд╡реЗрдХреНрдЯрд░
flapUp
(рдЕрдк) рдмрдирд╛рдПрдВ:
flapUp = [[UIPushBehavior alloc] initWithItems:@[self.block] mode:UIPushBehaviorModeInstantaneous]; flapUp.pushDirection = CGVectorMake(0, -1.1); flapUp.active = NO;
рдФрд░ рдЕрдВрдд рдореЗрдВ, "рдкрдХреНрд╖реА" рдореЗрдВ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдЬреЛрдбрд╝реЗрдВред
gravity = [[UIGravityBehavior alloc] initWithItems:@[self.block]]; gravity.magnitude = 1.1;
рдпрд╣ рд╣рдорд╛рд░рд╛ "рдкрдХреНрд╖реА" рдХреИрд╕реЗ рдЪрд▓реЗрдЧрд╛:

рдЪрд▓рддреА рд╣реБрдИ рдкрд╛рдЗрдкред
рдкрд╛рдЗрдк рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреНрд░реАрди рд╕реЗ рд╣рдЯрд╛рдиреЗ рдФрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдмрд▓ X рдХреЗ рд╕рд╛рде рджрд╛рдИрдВ рдУрд░ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдкрд╛рдЗрдк рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдШрдирддреНрд╡ рджреЗрддреЗ рд╣реИрдВред
pipesDynamicProperties= [[UIDynamicItemBehavior alloc] initWithItems:@[topPipe, bottomPipe]]; pipesDynamicProperties.allowsRotation = NO; pipesDynamicProperties.density = 1000;
рдкрд╛рдЗрдк рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдм рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
movePipes = [[UIPushBehavior alloc] initWithItems:@[topPipe, bottomPipe] mode:UIPushBehaviorModeInstantaneous]; movePipes.pushDirection = CGVectorMake(-2800, 0); movePipes.active = YES;
рдФрд░ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

рд╣рдо рдЯрдХрд░рд╛рд╡ рдореЗрдВ рдорд░ рдЬрд╛рддреЗ рд╣реИрдВ
рдЕрдВрддрд┐рдо рдЪрд░рдг рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рддреЗ рд╕рдордп рдиреБрдХрд╕рд╛рди рдХреЗ рдХреНрд╖рдг рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕реНрдХреНрд░реАрди рдкрд░ рдмрд╛рдИрдВ рд╕реАрдорд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдПрдХ рдЯрдХреНрдХрд░ рдореЗрдВ, рдпрд╣ рдкрд╛рдЗрдк рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдирдП рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рднреА рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
blockCollision = [[UICollisionBehavior alloc] initWithItems:@[self.block]]; [blockCollision addBoundaryWithIdentifier:@"LEFT_WALL" fromPoint:CGPointMake(-1*PIPE_WIDTH, 0) toPoint:CGPointMake(-1*PIPE_WIDTH, self.view.bounds.size.height)]; blockCollision.collisionDelegate = self;
"рдкрдХреНрд╖реА" рдФрд░ рдЬрдореАрди рдХреЗ рдмреАрдЪ рдЯрдХреНрдХрд░ рдЬреЛрдбрд╝реЗрдВред
groundCollision = [[UICollisionBehavior alloc] initWithItems:@[self.block, self.ground]]; groundCollision.collisionDelegate = self;
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкрд╛рдЗрдк рдмрдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкрд╛рдЗрдк рдФрд░ рдкрдХреНрд╖реА рдХреЗ рдмреАрдЪ рдПрдХ рдЯрдХрд░рд╛рд╡ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
[blockCollision addItem:topPipe]; [blockCollision addItem:bottomPipe];
рдЪреВрдВрдХрд┐ рдкрд╛рдЗрдк рдФрд░ рдкреГрдереНрд╡реА рдПрдХ рдФрд░
self
рдХреЗ рд╕рдорд╛рди рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИрдВ, "рдмрд░реНрдб" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ "рдЧреЗрдо рдУрд╡рд░" рдХрд╣рд▓рд╛рддрд╛ рд╣реИред рдЕрдм рдЯрдХрд░рд╛рд╡ рдкрдХреНрд╖реА рдФрд░ рдЬрдореАрди рдХреЗ рдмреАрдЪ, рд╕рд╛рде рд╣реА рдкрдХреНрд╖реА рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдкрд╛рдЗрдкреЛрдВ рдХреЗ рдмреАрдЪ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рд╕реНрд░реЛрдд рдХреЛрдб GITHub рдкрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП MIT рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдЬреЛ iOS7 рднреМрддрд┐рдХреА рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдк рдпрд╣рд╛рдВ рд╕реНрд░реЛрдд рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
github.com/joeblau/FlappyBlock