рдирдорд╕реНрдХрд╛рд░ рдкреНрд░рд┐рдп рдорд┐рддреНрд░ред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ gamedev рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рдФрд░ рд╕реВрдЪрдирд╛% рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВ)

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдмреЙрдХреНрд╕ 2 рдбреА рднреМрддрд┐рдХреА рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рдпрджрд┐ рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд▓реЗрдЦ рдкрд╕рдВрдж рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдФрд░ рддреАрд╕рд░рд╛ рднрд╛рдЧ рджреЛрдиреЛрдВ рд╣реЛрдВрдЧреЗред рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ
рдРрд╕рд╛ рдЦреЗрд▓ рдорд┐рд▓рддрд╛ рд╣реИред (рд╣рд╛рдБ, рдЦреЗрд▓ рдмрд╣реБрдд рд╣реА рдЕрдзреВрд░рд╛ рд╣реИ, рд▓реЗрдЦ рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рд╣реИ, рдХреЗрд╡рд▓ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдФрд░ рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде)
рдмрд╛рдХреА рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рд╣реИред
рдбреЗрд░рд╛ рдбрд╛рд▓реЗ рд╣реБрдП
рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?
- Box2D рднреМрддрд┐рдХреА рдЗрдВрдЬрди рд╣реАред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 2.0.2 рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реИред рд╣рд╛рдВ, рдФрд░ рдЙрдирдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╛рди рд╣реИред
рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рдпрд╛ рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рд▓рд┐рдВрдХ рдореЗрдВ рдпрд╣ рд╕рдм рд╕реНрд░реЛрдд рдХреЛрдб рднреА рд╣реИ)ред - рдЖрдкрдХреЛ as3 рдкрд░ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рджрд░рдЕрд╕рд▓ рд╣рдо рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, IDE рдкрд░ рдХреНрдпрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗред рдЖрдк FlashDevelop (рдореЗрд░реЗ рдЬреИрд╕реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реИрд╕реЗ, рдпрд╣ рдореБрдлрд╝реНрдд рд╣реИ; рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Adobe Flash CS5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
brain.dll, рдХреНрд░рдорд╢рдГ, рдФрд░ hands.dll
рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕
рдФрд░ рдЗрд╕рд▓рд┐рдП Box2D рдПрдХ рд╕реНрд╡рддрдВрддреНрд░, рдЦреБрд▓рд╛-рд╕реНрд░реЛрдд, рджреЛ-рдЖрдпрд╛рдореА рднреМрддрд┐рдХ рдЗрдВрдЬрди рд╣реИ (рдЦреЗрд▓ рдореЗрдВ рднреМрддрд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдФрд░ рди рдХреЗрд╡рд▓) рдПрдХ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрд░рд┐рди рдХрдЯреНрдЯреЛ, рд╕реА ++ рдХреЗ рд▓рд┐рдПред
рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрдХреНрддрд┐ рдерд╛ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдлреНрд▓реИрд╢ рдореЗрдВ рд▓рд┐рдпрд╛ рдФрд░ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ред
рдХреЛрдИ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдмрд╣реБрдд "рдореЛрдЯрд╛" рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░рдирд╛, рдХреЛрдИ - рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдореИрдВ рдПрдХ рдмрд╛рдд рдЬрд╛рдирддрд╛ рд╣реВрдВ - рд╡реЗ рдЗрд╕ рдкрд░ рдЕрд╕рд▓реА рдЦреЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рд╣рд╛рдереЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ Box2D рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рд╡рдзрд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпреЗ рдкреНрд░рд╛рд╡рдзрд╛рди рдЕрдореВрд░реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ:
- рдорд╛рдк рдХреА рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ Box2D рдкрд┐рдХреНрд╕рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
- рдорд╛рдк рдХреА рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ Box2D рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдкреНрд░рдгрд╛рд▓реА C (si) - рдореАрдЯрд░, рдХрд┐рд▓реЛрдЧреНрд░рд╛рдо, рд╕реЗрдХрдВрдб (ISS) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- Box2D рдХреЛ 10 рд╕реЗрдВрдЯреАрдореАрдЯрд░ рд╕реЗ 10 рдореАрдЯрд░ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреН, рдПрдХ рдЧреНрд▓рд╛рд╕ рд╕реЗ рдмрд╕ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ
- рдЪреВрдВрдХрд┐ Box2D рдЬрд┐рди рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡реЗ рд╕реНрдХреНрд░реАрди рдЗрдХрд╛рдЗрдпреЛрдВ (рдкрд┐рдХреНрд╕рд▓) рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИрдВ, рдЖрдкрдХреЛ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд▓рд┐рдП рдореАрдЯрд░ (рдЗрдХрд╛рдЗрдпреЛрдВ) рдХреЗ рдХреБрдЫ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛рд░рдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 10 рд╕реЗрдВрдЯреАрдореАрдЯрд░ = 30 рдкрд┐рдХреНрд╕реЗрд▓ред
- Box2D рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ: рдЧрддрд┐рд╢реАрд▓ рдФрд░ рд╕реНрдерд┐рд░
- рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБрдПрдВ рд╕реНрд╡рдпрдВ рдХреЗ рдмреАрдЪ рдЯрдХрд░рд╛рд╡ (рдИрдВрдЯреЛрдВ, рдЧреЗрдВрджреЛрдВ, рдЕрдгреБрдУрдВ, рд╣реЗрд▓реАрдХрд╛рдкреНрдЯрд░реЛрдВ, рдХрд╛рд░реЛрдВ, рд▓реЛрдЧреЛрдВ ...) рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд╕реНрдереИрддрд┐рдХ - рдирд╣реАрдВ (рдкреГрдереНрд╡реА, рдиреАрдВрд╡, рдлреНрд░реЗрдо - рдпрд╣ рд╕рдм рдЕрд╡рд┐рдирд╛рд╢реА рд╣реИ)
- Box2D рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ: рд╕рд░реНрдХрд▓, рд╡рд░реНрдЧ, рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬред
- рдмреЙрдХреНрд╕ 2 рдбреА рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдирд╛рдо рдЙрдкрд╕рд░реНрдЧ "рдмреА 2" рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрдВрдЬрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реЛред
рдЦреИрд░, рдЕрднреА рдХреЗ рд▓рд┐рдПред
рд╣рдо рджреБрд░реНрднрд╛рд╡рдирд╛ рдХрд░рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ
рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЦрд┐рдбрд╝рдХреА рдХрд╛ рдЖрдХрд╛рд░ 500x500 рдФрд░ 30FPS рд╣реИ, рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ Main.as рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╣рдо рдмреЙрдХреНрд╕ 2 рдбреА рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдбреИрдбреА рдХреЛ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред
рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ:
import Box2D.Dynamics.*; import Box2D.Dynamics.Joints.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.Math.*;
рд╕реНрдерд┐рд░рд╛рдВрдХ рдмрдирд╛рдПрдБ:
public static const ITERATIONS:int = 20; public static const TIMESTEP:Number = 1.0 / 30.0;
рдпреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреНрдпрд╛ рд╣реИрдВ - рдореИрдВ рдмрд╛рдж рдореЗрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред
рдЪрд░реЛрдВ рджреБрдирд┐рдпрд╛, рд╕реНрдкреНрд░рд╛рдЗрдЯ, рд░реЛрдЯреЗрдЯрд░, рд╣реАрд░реЛ рдФрд░ рд╕реАрдорд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ:
public var world:b2World; public var sprite:Sprite;
рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдПрдБ:
public function InitializePhysicsWorld():void { var worldAABB:b2AABB = new b2AABB();
рдФрд░ рдореБрдЦреНрдп () рдореЗрдВ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
public function Main():void { sprite = new Sprite(); addChild(sprite); sprite.x = sprite.y = 250; rotator = 0; InitializePhysicsWorld(); }
рд╣рдорд╛рд░реА рджреБрдирд┐рдпрд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдЕрдм рдЗрд╕реЗ
рддрд┐рддрд▓рд┐рдпреЛрдВ, рдШрд╛рд╕ рдФрд░ рдкрд╛рдиреА рдХреЗ рд╕рд╛рде рднрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
рд╡рд┐рд╢реНрд╡ рдХреА рд╕реАрдорд╛рдПрдБ рдмрдирд╛рдПрдБ, рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдПрдБ:
public function CreateBoundsWorld():b2Body { var body:b2Body;
рд╣рдо рдореБрдЦреНрдп рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ ():
boundsWorld = CreateBoundsWorld();
рдЕрдм рд╣рдорд╛рд░реА рджреБрдирд┐рдпрд╛ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд░реБрдХрд┐рдП, рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рднреА рджрд┐рдЦрд╛рдИ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ?
рдбрд░реЛ рдордд, рдкреНрд░рд┐рдп% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдЗрдВрдЬрди рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рднреМрддрд┐рдХреА рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрдВрдХреНрд╢рди рдмрдирд╛рдПрдВ:
public function enterFrameListener(event:Event):void { world.Step(timestep, ITERATIONS);
рд╣рдо рд╢реНрд░реЛрддрд╛ рдХреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ ():
this.addEventListener(Event.ENTER_FRAME, enterFrameListener);
рд▓реЙрдиреНрдЪ рдФрд░ рджреЗрдЦреЗрдВ:

рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рдирд╛рдпрдХ-рдЧреЗрдВрдж рд╣реИред рдлрд┐рд░ рд╕реЗ рд╣рдо рдПрдХ рдлрдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ:
public function CreateHero(x:Number, y:Number):void { var bodyDef:b2BodyDef; var circleDef:b2CircleDef; var x:Number; var y:Number; var r:Number; x = x / 30;
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореБрдЦреНрдп () рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝реЗрдВ:
CreateHero(0, 0);
рд╣рдо рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдирдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдХреЗрдВрджреНрд░ рдореЗрдВ рдПрдХ рд╕рдлреЗрдж рдЧреЗрдВрдж рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред
рд▓реЗрдХрд┐рди рд╡рд╣ рд╣рд┐рд▓рддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдЖрдк рдПрдХ рдЪреМрдХрд╕ рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВ, рддреЛ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдерд╛ред рдХреНрдпреЛрдВ? рджреБрдирд┐рдпрд╛ рдХрд╛ рдЫрджреНрдо рдШреБрдорд╛рд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдорд╛рд░реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЗ рдмрд╛рдж рд╕реЗ, рдпрд╣ рдмрд╕ рдЧрддрд┐рд╢реАрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рджреБрдирд┐рдпрд╛ рдХреА рдЪрд╛рдмреА "рд╡рд╛рдо" рдФрд░ "рджрд╛рдПрдВ" рдкрд░ рдмрдирд╛рдПрдВрдЧреЗред
рдЖрдкрдХреЛ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдШреБрдорд╛рдиреЗ рдФрд░ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рдордЭ рдЧрдП рд╣реЛрдВрдЧреЗ рдХрд┐ рдЖрдк рд╣рдорд╛рд░реЗ рд╣реАрд░реЛ% рдХреЗ рд▓рд┐рдП "рд╕реНрдерд┐рд░" рдХрдорд░реЗ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдШреБрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ)
рджреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
public var keyPressedRight:Boolean; public var keyPressedLeft:Boolean;
рдореБрдЦреНрдп рд╢реНрд░реЛрддрд╛ ():
parent.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener); parent.addEventListener(KeyboardEvent.KEY_UP, keyUpListener);
рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ:
public function keyDownListener(event:KeyboardEvent):void { switch(event.keyCode) { case 37: keyPressedRight = true; break; case 39: keyPressedLeft = true; break; } } public function keyUpListener(event:KeyboardEvent):void { switch(event.keyCode) { case 37: keyPressedRight=false; break; case 39: keyPressedLeft = false; break; } }
рдЕрдм рд╣рдорд╛рд░реЗ enterFrameListener рдкрд░ рдЬрд╛рдПрдБ, рдЬреЛрдбрд╝реЗрдВ:
if (keyPressedRight) rotator -= 4; else if(keyPressedLeft) rotator += 4;
рд╣рдо рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдШреБрдорд╛рддреЗ рд╣реИрдВ:
sprite.rotation = rotator;
рдкреНрд░рдмрдВрдзрди рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рднреМрддрд┐рдХ рдЗрдВрдЬрди рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдмрд╛рдВрдзреЗрдВ, рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдмрдирд╛рдПрдВ, рдЬреЛ рд░реЛрдЯреЗрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:
var angle:Number = (270 + rotator_fix) / 180 * Math.PI; var pseudo_gravity:b2Vec2 = b2Vec2.Make(Math.cos(angle), -Math.sin(angle));
рд╣рдордиреЗ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рд╡реЗрдХреНрдЯрд░ рдХреА рдЧрдгрдирд╛ рдХреА, рдЕрдм рд╣рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдирд╛рдпрдХ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
for (var body:b2Body = world.GetBodyList(); body; body = body.GetNext())
рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рд╣рд╛рдБ! рдмреАрдЪ рдореЗрдВ рдХреБрдЫ рднреБрд░рднреБрд░рд╛рдкрди рдЬреЛрдбрд╝реЗрдВред рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдПрдБ:
public function CreateStaticRect(x:Number, y:Number, w:Number, h:Number):void { var total_x:Number = ((x + w / 2) - 150) / 30; var total_y:Number = ((y + h / 2) - 150) / 30; var total_w:Number = w / 30; var total_h:Number = h / 30; var body:b2Body; var bodyDef:b2BodyDef; var polygon:b2PolygonDef; bodyDef = new b2BodyDef(); polygon = new b2PolygonDef(); bodyDef.position.Set(0, 0); bodyDef.position.Set(total_x, total_y); polygon.SetAsBox(total_w / 2, total_h / 2); polygon.density = 0.0; polygon.friction = 0.5; polygon.restitution = 0.2; body = world.CreateBody(bodyDef); body.CreateShape(polygon); body.SetMassFromShapes(); body.SetUserData("box"); }
рдФрд░ рдореБрдЦреНрдп рдХреЗ рдЕрдВрдд рдореЗрдВ ():
CreateStaticRect(0, 150, 150, 10);
рдЪреЗрд╣рд░реЗ рдкрд░ "рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк" рддреИрдпрд╛рд░ред
рдкрд░рд┐рдгрд╛рдо
рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрджрдо рд╣реИред рдкреНрд░рд┐рдп рджреЛрд╕реНрддреЛрдВ, рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рд▓реЗрдЦ рд▓рд┐рдЦреВрдВрдЧрд╛, рдЕрдВрдд рдореЗрдВ рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓реЗрдЧрд╛ред
рдкреБрдирд╢реНрдЪ: рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рд╕рднреА рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛:
рд╕реВрддреНрд░ |
Swf рдлрд╝рд╛рдЗрд▓ |
рдПрдореНрдмреЗрдб SWF |
Box2DlibPSS: рдореБрдлреНрдд рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдХреЛрдИ рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╣реИред
UPD: рднрд╛рдЧ II