рдкрд╛рдпрдерди рдФрд░ Box2D рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░рд▓ рдЕрдВрддрд░рд┐рдХреНрд╖ рд╕рд┐рдореБрд▓реЗрд╢рди

рд╣реЗрд▓реЛ, рд╣реИрдмрд░ред

рдпрд╣ рд▓реЗрдЦ рдореЙрдбрд▓рд┐рдВрдЧ рдж рдпреВрдирд┐рд╡рд░реНрд╕ рдХреЗ рд╣рд╛рд▓рд┐рдпрд╛ рдкреНрд░рдХрд╛рд╢рди рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ , рдЬрд╣рд╛рдВ рд▓реЗрдЦрдХ рдиреЗ рд╡рд┐рднрд┐рдиреНрди рд▓реМрдХрд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдЕрдиреБрдХрд░рдг рджрд┐рдЦрд╛рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╣рд╛рдБ рдкреНрд░рд╕реНрддреБрдд рдХреЛрдб рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓рд┐рдЦрдХрд░ Box2D рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреМрддрд┐рдХ рд╕рд┐рдореБрд▓реЗрд╢рди рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдБ ред

рдореИрдВ рдПрдХ рдЧрд▓рддреА рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рд▓реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реЗрдмреНрд░реЗ рдкрд░ рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП Box2D рдХрд╛ рдкрд╣рд▓рд╛ рд╡рд┐рд╡рд░рдг рд╣реИ, рд╣рдо рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рднрд░рддреЗ рд╣реИрдВред



рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рдХрд╛рдо рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд░рдг рдХрдЯреМрддреА рдХреЗ рдЕрдзреАрди рд╣реИред

Box2D рдПрдХ рдирд┐: рд╢реБрд▓реНрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдмреНрд▓рд┐рдЬрд╝рд╛рд░реНрдб рдПрд░рд┐рди рдХрдЯреНрдЯреЛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ 2007 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЖрдЬ рдЗрд╕реЗ рд▓рдЧрднрдЧ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╛рдЗрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрджрд░рдЧрд╛рд╣ рднреА рд╣реИ, рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдмрд▓реНрдХрд┐ рднреНрд░рд╛рдордХ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреА рдорджрдж рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдкрд░рд┐рдЪрдп


Pybox2d рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рджреЛ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ - Box2D рд╕реНрд╡рдпрдВ, рднреМрддрд┐рдХ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ред рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЕрдЧрд░ рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд░реНрдЧ рд╡рд┐рднрд┐рдиреНрди рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ ( рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо pygame рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ pygame рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ "рдкрд┐рдХ рдЕрдк" рд╣реИ, рдФрд░ рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ Box2D pygame рдХрдорд╛рдВрдб ред

Box2D рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдб рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ, рдФрд░ рд▓рд┐рдирдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рджреЛрдиреЛрдВ рдкрд░, рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

from Box2D.examples.framework import Framework
from Box2D import *

class Simulation(Framework):
    def __init__(self):
        super(Simulation, self).__init__()

        # Ground body
        self.world.CreateBody(shapes=b2LoopShape(vertices=[(20, 0), (20, 40), (-20, 40), (-20, 0)]))
        # Dynamic body
        circle = b2FixtureDef(shape=b2CircleShape(radius=2), density=1, friction=1.0, restitution=0.5)
        self.world.CreateBody(type=b2_dynamicBody, position=b2Vec2(0,30), fixtures=circle, linearVelocity=(5, 0))

    def Step(self, settings):
        super(Simulation, self).Step(settings)

if __name__ == "__main__":
    Simulation().run()

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рд╕рд┐рдореБрд▓реЗрд╢рди рдХреНрд▓рд╛рд╕ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо CreateBody рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ ред рдкрд╣рд▓реА рдПрдХ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реА рджреБрдирд┐рдпрд╛ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред рджреВрд╕рд░реА рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░ b2_dynamicBody рдХреА рд╣реИ, рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ (рдЖрдХрд╛рд░, рдЖрдХрд╛рд░, рдШрдирддреНрд╡, рдШрд░реНрд╖рдг рдЧреБрдгрд╛рдВрдХ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрддрд┐) рдХреЛрдб рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╣рд░ рдмрд╛рд░ рдЪрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдпреВрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдмреИрдХрдПрдВрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд░реНрдЧ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╕рд┐рдореБрд▓реЗрд╢рди рджреЗрдЦреЗрдВ:



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ рд╕рд┐рд░реНрдл рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдФрд░ рдЙрдирдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдПред рд╕рдм рдХреБрдЫ "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг, рдШрд░реНрд╖рдг, рд▓реЛрдЪ, рдирд┐рдХрд╛рдпреЛрдВ рдХреА рдмрд╛рддрдЪреАрдд рдЖрджрд┐, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдЕрдкрдиреЗ "рдЕрдВрддрд░рд┐рдХреНрд╖" рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдордиреЗ "рдЙрдкрдЧреНрд░рд╣" рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмреЙрдХреНрд╕ 2 рдбреА рдореЗрдВ рдиреНрдпреВрдЯреЛрдирд┐рдпрди рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рд╕реНрдЯреЗрдк рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рд╢рд░реАрд░ рдмрдирд╛рдПрдВрдЧреЗ - рдПрдХ рдЧреНрд░рд╣, рдФрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдордиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЙрдкрдЧреНрд░рд╣ред

рд╕рдВрдкреВрд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб:

from Box2D import *
from Box2D.examples.framework import Framework


class Simulation(Framework):
    def __init__(self):
        super(Simulation, self).__init__()

        # Default gravity disable
        self.world.gravity = (0.0, 0.0)
        # Gravity constant
        self.G = 100

        # Planet
        circle = b2FixtureDef(shape=b2CircleShape(radius=5), density=1, friction=0.5, restitution=0.5)
        self.world.CreateBody(type=b2_dynamicBody, position=b2Vec2(0,0), fixtures=circle)

        # Satellite
        circle_small = b2FixtureDef(shape=b2CircleShape(radius=0.2), density=1, friction=0.5, restitution=0.2)
        self.world.CreateBody(type=b2_dynamicBody, position=b2Vec2(0, 10), fixtures=circle_small, linearVelocity=(20, 0))

    def Step(self, settings):
        super(Simulation, self).Step(settings)

        # Simulate the Newton's gravity
        for bi in self.world.bodies:
            for bk in self.world.bodies:
                if bi == bk:
                    continue

                pi, pk = bi.worldCenter, bk.worldCenter
                mi, mk = bi.mass, bk.mass
                delta = pk - pi
                r = delta.length
                if abs(r) < 1.0:
                    r = 1.0

                force = self.G * mi * mk / (r * r)
                delta.Normalize()
                bi.ApplyForce(force * delta, pi, True)

if __name__ == "__main__":
    Simulation().run()

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рд╕реНрд╡.рд╡рд░реНрд▓реНрдб.рдЧреНрд░реИрд╡рд┐рдЯреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ 0. рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рдорд╛рдирдХ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЛ "рдмрдВрдж" рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ рдЬреА рдХреЛ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рдЖрднрд╛рд╕реА рджреБрдирд┐рдпрд╛ рдХрд╛ "рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рд╕реНрдерд┐рд░" рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд░рдг рд╡рд┐рдзрд┐ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдордиреЗ рджреЛ рд╡рд╕реНрддреБрдПрдВ рднреА рдмрдирд╛рдИрдВ - рдПрдХ рдЙрдкрдЧреНрд░рд╣ рдФрд░ рдПрдХ рдЧреНрд░рд╣ред рдШрдирддреНрд╡ рдФрд░ рддреНрд░рд┐рдЬреНрдпрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, Box2D рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдпрдВ рдЧрдгрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреНрд░рд╡реНрдпрдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЗрдВрдЯрд░реИрдХреНрд╢рди рдлреЛрд░реНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЗ рдиреНрдпреВрдЯрди рдХреЗ рдирд┐рдпрдо рдХреЗ рд╕рд╛рдорд╛рдиреНрдп "рд╕реНрдХреВрд▓" рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ :



рдЕрдм рд╣рдо рд╕рд┐рдореБрд▓реЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдкрд╣рд▓реЗ рдмреНрд░рд╣реНрдорд╛рдВрдбреАрдп рдЧрддрд┐ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рдереЗ, рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдкрдЧреНрд░рд╣ рдиреЗ рдЕрднреА рднреА рдкреВрд░реЗ рдЧреНрд░рд╣ рдХреА рдкрд░рд┐рдХреНрд░рдорд╛ рдХреА рдереА, рдЗрд╕реЗ "рдЙрдбрд╝рд╛рди" рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ: рд╣рдо



рдХреЛрдб рдХреА рд▓рд╛рдЗрди рдХреЛ рд░реИрдЦрд┐рдХ рдЧрддрд┐ рдореЗрдВ рдмрджрд▓рдХрд░ рдЧрддрд┐ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ = (28, 0):



рд╣рдорд╛рд░реЗ "рдЙрдкрдЧреНрд░рд╣" рдиреЗ "рдЧреНрд░рд╣" рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИ! рдпрджрд┐ рдЧрддрд┐ рдХреЛ рдФрд░ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдХреНрд╖рд╛ рдЕрдгреНрдбрд╛рдХрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧреА:



рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ "рд╕реМрд░ рдордВрдбрд▓" рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдФрд░ рджрд░реНрд╢рд╛рдПрдВрдЧреЗ, рд╡рд┐рднрд┐рдиреНрди рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рддреАрди рдЧреНрд░рд╣реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП:

circle_small = b2FixtureDef(shape=b2CircleShape(radius=0.2), density=1, friction=0.5, restitution=0.2)
circle_medium = b2FixtureDef(shape=b2CircleShape(radius=0.3), density=1, friction=1.0, restitution=0.5)
self.world.CreateBody(type=b2_dynamicBody, position=b2Vec2(0, 6), fixtures=circle_small, linearVelocity=(37, 0))
self.world.CreateBody(type=b2_dynamicBody, position=b2Vec2(0, 10), fixtures=circle_small, linearVelocity=(28, 0))
self.world.CreateBody(type=b2_dynamicBody, position=b2Vec2(0, 15), fixtures=circle_medium, linearVelocity=(22, 0))

рдкрд░рд┐рдгрд╛рдо:



рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЧреНрд░рд╣ "рд╕реВрд░реНрдп" рд╕реЗ рд╣реИ, рдЗрд╕рдХреА рдХреНрд░рд╛рдВрддрд┐ рдХреА рдЕрд╡рдзрд┐ (рдХреЗрдкреНрд▓рд░ рдХрд╛ рддреАрд╕рд░рд╛ рдирд┐рдпрдо) рдЬрд┐рддрдиреА рд▓рдВрдмреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмреЙрдХреНрд╕ 2 рдбреА рдЗрдВрдЬрди рд╕реНрдХреНрд░реАрди рдкрд░ рдЧрддрд┐ рдХреА рдЧрддрд┐ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрдкрд▓рд░ рдХреЗ 1 рдФрд░ 2 рдХрд╛рдиреВрдиреЛрдВ рдХреЛ "рджреЗрдЦрдирд╛" рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рднреА рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, Box2D рдХреЗ рд╕рд╛рде, рд╕рд░рд▓ рд╕рд┐рдореБрд▓реЗрд╢рди рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдЗрдВрдЬрди рдЕрднреА рднреА рдПрдХ рдЧреЗрдо рдЗрдВрдЬрди рд╣реИ, рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрд┐рдЧ рдмреИрдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЖрдХрд╛рд╢рдЧрдВрдЧрд╛рдУрдВ рдХреЗ рдЯрдХрд░рд╛рд╡ рдпрд╛ рдкрджрд╛рд░реНрде рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдПрдХ рд╕рд╣реА рд╕рд┐рдореБрд▓реЗрд╢рди рд╕реЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдХреБрдЫ рдкреИрдЯрд░реНрди рджреЗрдЦрдиреЗ рдореЗрдВ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред

рдПрдХ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рд╕рднреА рдлрд┐рдЯ рдирд╣реАрдВ рдереЗред рдпрджрд┐ рдЕрдиреБрдорд╛рди рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИрдВ, рддреЛ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЕрдзрд┐рдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

All Articles