рдкрд┐рдЫрд▓реЗ
рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ
рдЧреЛрдбреЛрдЯ рдореЗрдВ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдХрд╡рд░
рдХреАрдВ ред рдФрд░ рдЗрд╕ рд╕рддрд╣реА рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде, рдЖрдк рдХреЗрд╡рд▓ рдЦреЗрд▓реЛрдВ рдХреЗ рдбреЗрдореЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдЬреЗрдВрдбреЗ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:
1) рдЪрдпрдирд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдпрд╛рддред
2) рдирдП рдПрдирд┐рдореЗрд╢рдиред рдЪрд░рд┐рддреНрд░ рдХреЗ рд╡рд┐рдХрд▓реНрдкред
3) рдкреНрд░рдмрдВрдзрдиред
3) рдЬреАрдбреАрдПрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!
4) рд╕рд╛рдзрд╛рд░рдг рдЯрд╛рдЗрд▓реЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВред
5) рдмреЛрдирд╕: рд╕рд░рд▓рддрдо рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгред
рдЦреИрд░, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдмрд╣реБрдд рд╕рд╛рд░реА рддрд╕реНрд╡реАрд░реЗрдВ!
рд╕рдВрдХрд▓рди ....?
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рд▓реЗрдЦрдХреЛрдВ рдиреЗ linux x86 рдХреЗ рд▓рд┐рдП рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдЕрднреА рднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рдереЗред рд▓реЗрдХрд┐рди рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ, рдбреЗрдореЛ рдпрд╛ рд╕рд┐рд░реНрдл рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдирд┐рд░реНрдпрд╛рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд╣реАрдВ рд╣реИрдВ? рдпрд╣ рд╕рд╣реА рд╣реИ! рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ!
рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╕рдВрдХрд▓рди рдХрд░реЗрдВ
cd ./godot
рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрдкрдХрд░рдг:
scons bin/godot target=release_debug tools=no
рд╕рдлрд▓ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рддрд╛рдЬрд╝рд╛ рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓ рдХреЛ linux_x11_32_debug рдореЗрдВ рдмрджрд▓реЗрдВ
рдирд┐рд░реНрдпрд╛рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрд╡рдпрдВ:
scons bin/godot_rel target=release tools=no
Linux_x11_32_release рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ
рд╣рдо рдЗрд╕реЗ рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВред
find ./* -name "linux_x11_32_*" -exec zip ./linux_x11_32_templates.zip "{}" +
рд╣рдо рдЧреЛрдбреЛрдЯ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВред Voila, рдЕрдм рдЖрдк рдХрд┐рд╕реА рднреА рдХреНрд╖рдорддрд╛ рдХреЗ GNU / Linux OS рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдУрдПрд╕ рдХреЗ рддрд╣рдд рдФрд░ рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ рдЖрдкрдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдпред рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рд╢рд░рд╛рдм рдХреЗ рд▓рд┐рдП рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ 64 рдмрд┐рдЯреНрд╕ рдХреЛ рдЕрдирдЪреЗрдХ рдпрд╛ рдЪреЗрдХ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рддреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВред

рдЖрдк рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░
рдирд┐рд░реНрдпрд╛рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдФрд░ рдорд╛рдВрдЧ рдореЗрдВ рд╣реИ, рддреЛ рд▓реЗрдЦреЛрдВ рдХреЗ рд░реВрд╕реА рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдФрд░ рдЧреЛрдбреЛрдЯ рджреНрд╡рд╛рд░рд╛ рд░реВрд╕реА-рднрд╛рд╖рд╛ рд╡рд┐рдХреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдПрдиреАрдореЗрд╢рди рдХреВрдж
рдкрд┐рдЫрд▓реЗ рдкрд╛рда рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреИрдкреНрдЯрди рдХреЗ рджреМрдбрд╝рдиреЗ рдФрд░ рдХреВрджрдиреЗ рдХреЗ рдкреНрд░реЗрдд рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рдПрдХ рдмрдирд╛рд╡рдЯ рддреИрдпрд╛рд░ рдХреАред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛ рдПрдирд┐рдореЗрд╢рди рдЬрдВрдкрд┐рдВрдЧ рдФрд░ рд░рди рдмрдирд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╣реВрдВрдЧрд╛:
run: Len(s): 0.9 Step(s): 0.1 Looping: yes jumping: Len(s): 1 Step(s): 0.1 Animation: тЧЛтЧЛтЧЛтЧЛтЧЛтЧЛтЧЛ , - 24 30, - . Looping: no

рд╣рд╛рдВ, рдПрдХ рдЫрд▓рд╛рдВрдЧ рд╕рд┐рд░реНрдл рдПрдХ рдЫрд▓рд╛рдВрдЧ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЧрд┐рд░рд╛рд╡рдЯ рд╡рд╛рд▓реЗ рдПрдиреАрдореЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
falling: Len(s): 0.1 Step(s): 0.1 Animation: тДЦ30 Looping: yes
рдЪрд░рд┐рддреНрд░ рд╡рд┐рдХрд▓реНрдк
рддреАрди рдмрд┐рдВрджреБ:
- рдХреИрдорд░рд╛
- рдЬрдореАрди рдХреЛ рдЫреВрдирд╛
- рдЪрд░рд┐рддреНрд░ рдЬреНрдпрд╛рдорд┐рддрд┐
1) рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреИрдорд░рд╛ 2 рдбреА / рдХрд░рдВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдПрдХ рдЪреЗрдХрдорд╛рд░реНрдХ рд╣реИ, рдЬреЛ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд▓реЗрдпрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
2) рдиреЛрдб CollisionShape2D рдЬреЛрдбрд╝реЗрдВред рдпрд╣ "рдиреЛрдбрд╛" 2 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрдкреНрддрд╛рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ, CollisionShape2D -> Shape -> New RayShape2D рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред 2 рдорд┐рд▓реАрдореАрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ рдПрдХ рдЫреЛрдЯрд╛ рддреАрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ - рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ - RayShape2D рдкреИрд░рд╛рдореАрдЯрд░ рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛ред
рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ RayShape2D / Lenght 20 рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рд╕реЙрд▓реНрд╡рд░ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ 0.5 рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рджреЗрдЧрд╛)
рдЕрдм рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЦреЗрд▓ рдореЗрдВ, рдпрджрд┐ рдЪрд░рд┐рддреНрд░ "рдлрд░реНрд╢ рдкрд░ рд▓рд╛рдд рдирд╣реАрдВ рдорд╛рд░рддрд╛ рд╣реИ", рддреЛ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрд╕ рддреАрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдлрд░реНрд╢ рдХреЛ рдЫреВ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
3) рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдордЬрд╝рд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ Node CollisionPolygon2D рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рд╣рдореЗрдВ рдЗрд╕реА рдмрд╣реБрднреБрдЬ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ рдЪрд░рд┐рддреНрд░ рдХреЛ "рджреНрд░рд╡реНрдпрдорд╛рди" рджреЗрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рдд, рд╣рдореЗрдВ рдпрд╣ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдпрдХ рдЙрдирдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рдореЗрдВ "рджреАрд╡рд╛рд░реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣рд░рд╛" рджреЗрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдпрд╣ рдмрд╕ рджреАрд╡рд╛рд░реЛрдВ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░реЗрдЧрд╛ред

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

рд╣реЛ рдЧрдпрд╛, рд╣рдорд╛рд░рд╛ рдЪрд░рд┐рддреНрд░ рдПрдХ рдмреНрд▓реЙрдХрд╣реЗрдб рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдмрд╛рдд рдкреНрд░рдмрдВрдзрди рд╣реИред
рдирд┐рдпрдВрддреНрд░рдг рдХреБрдВрдЬреА рдмрдирд╛рдирд╛
- рдорд╛рдирдХ рдкреНрд░рдмрдВрдзрдиред
рдЗрд╕реЗ рдмрдирд╛рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред рджреГрд╢реНрдп рдкрд░ рдЬрд╛рдПрдБ -> рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ -> рдЗрдирдкреБрдЯ рдорд╛рдирдЪрд┐рддреНрд░

3 рдирд┐рдпрдВрддреНрд░рдг рдХреБрдВрдЬреА рдмрдирд╛рдПрдБ - Move_left, Move_right рдФрд░ jumpред рдЙрдиреНрд╣реЗрдВ рдЪрд╛рдмреА рд╕реМрдВрдк рджреЗрдВред рд╣реЛ рдЧрдпрд╛!
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЧреЛрдбреЛрдЯ рдЧреЗрдордкреИрдбреНрд╕ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рднреА рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╕рдордпред
- рдПрдХ рдЯрдЪрд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде рдкреНрд░рдмрдВрдзрдиред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред "рдЙрдИ" рдирд╛рдо рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдирд╛рдпрдХ рдиреЛрдб рдХреИрдирд╡рд╛рд╕рд▓реЗрдпрд░ рдХреЛ рдмрд╛рдВрдзреЗрдВред рдФрд░ рдЙрд╕рдХреЗ рдмрджрд▓реЗ рдореЗрдВ, рдЯрдЪрд╕реНрдХреНрд░реАрдирдмрдЯрди рдХреА 3 рдкреНрд░рддрд┐рдпрд╛рдВред рдЙрдиреНрд╣реЗрдВ рдмрд╛рдПрдВ, рджрд╛рдПрдВ рдФрд░ рдХреВрджреЗрдВред
рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЫрд╡рд┐ рджреЗрддреЗ рд╣реИрдВред рд╡реЗ рддреБрд░рдВрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рд╣рдо рдЗрд╕рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдиреАрд▓реА рдЦрд┐рдбрд╝рдХреА "рдХреИрдорд░рд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдПрд░рд┐рдпрд╛" рд╣реИред
рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ, рдХреНрд░рдорд╢рдГ рдореВрд╡_рд▓реЗрдлреНрдЯ, рдореВрд╡_рдПрдлрд╝ рдФрд░ рдЬрдВрдк, рдкреИрд░рд╛рдореАрдЯрд░ рджрд░реНрдЬ рдХрд░реЗрдВред рдЦреИрд░, рд╣рдо рдЯрдЪрд╕реНрдХреНрд░реАрди рдореЗрдВ рд╣реА рд╡рд┐рдЬрд┐рдмрд┐рд▓рд┐рдЯреА рдореЛрдб рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣реЛ рдЧрдпрд╛! 
GDScript
рдпрд╣рд╛рдВ рдореИрдВ рдереЛрдбрд╝рд╛ рдмреЗрд╡рдХреВрдл рд╣реВрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдмрд╣реБрдд рдИрдорд╛рдирджрд╛рд░ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЦреБрдж рдХреЛ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдкрд░ рдХрд┐рддрд╛рдмреЗрдВ рдкрдврд╝реАрдВред рдХреНрдпреЛрдВрдХрд┐ GDScript рдЗрд╕рд╕реЗ рдХрд╛рдлреА рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИред
рдЪреЗрддрд╛рд╡рдиреА!
- рдЗрдВрдЬрди рд╕рд┐рд░рд┐рд▓рд┐рдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЧрд▓рддреА рд╕реЗ рдЗрд╕ рдкрд░ рдХреБрдЫ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмрдбрд╝реА рдЧрд▓рддреА рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреВрд░реА рд▓рд╛рдЗрди рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдмрд╣реБрдд рдЬрд░реВрд░реА рд╣реИред рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдирд╣реАрдВ рд╣реИ - рдФрд░ рдирд╛рдпрдХ рдлрд░реНрд╢ рдкрд░ рдЧрд┐рд░ рд╕рдХрддрд╛ рд╣реИ, рдЧрд▓рдд рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
- рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдПрдХ noob рд╣реВрдБ, рд▓реЗрдХрд┐рди рдореИрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рд╕рдм рдХреБрдЫ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред
рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрдиреБрд░реЛрдз - рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП - рдХреГрдкрдпрд╛ рд▓рд┐рдЦреЗрдВред рдореБрдЭреЗ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЦреБрд╢реА рд╣реЛрдЧреАред
рдореБрдЭреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдиреАрдореЗрд╢рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ:
рдХреНрдпрд╛ рдерд╛ extends RigidBody2D var anim="" func _integrate_forces(s): var new_anim=anim new_anim=┬лidle┬╗ if (new_anim!=anim): anim=new_anim get_node(┬лanim┬╗).play(anim)
рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдмрджрд▓реЗрдВ:
рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдБ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ extends RigidBody2D var anim=""
рд╣рдо Integrated_forces рдлрд╝рдВрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдорджрдж рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВ:
рдЕрдкрдиреЗ рднреМрддрд┐рдХреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред рдареАрдХ рд╣реИ, рд╣рдо рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВред
PS рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдЧреЗ рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреИрд╕реЗ рдХрд░реЗрдВред рддреЛ рдмрд╕ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ:
рд╣рдо рдЗрдВрдЯрд░реИрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ func _integrate_forces(s): var lv = s.get_linear_velocity() var step = s.get_step() var new_anim=anim var new_siding_left=siding_left
рд╣рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдорд┐рд▓рддрд╛ рд╣реИ var move_left = Input.is_action_pressed("move_left") var move_right = Input.is_action_pressed("move_right") var jump = Input.is_action_pressed("jump")
рдкреГрдереНрд╡реА рдЦреЛрдЬ (рдлрд░реНрд╢ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рд╕рдВрдкрд░реНрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ) var found_floor=false var floor_index=-1 for x in range(s.get_contact_count()): var ci = s.get_contact_local_normal(x) if (ci.dot(Vector2(0,-1))>0.6): found_floor=true floor_index=x if (found_floor): airborne_time=0.0 else: airborne_time+=step
рдХреВрджрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ if (jumping): if (lv.y>0):
рдкреГрдереНрд╡реА рдкрд░ рдЪрд░рд┐рддреНрд░ рдЖрдВрджреЛрд▓рди if (on_floor): if (move_left and not move_right): if (lv.x > -WALK_MAX_VELOCITY): lv.x-=WALK_ACCEL*step elif (move_right and not move_left): if (lv.x < WALK_MAX_VELOCITY): lv.x+=WALK_ACCEL*step else: var xv = abs(lv.x) xv-=WALK_DEACCEL*step if (xv<0): xv=0 lv.x=sign(lv.x)*xv
рд╣рд╡рд╛ рдореЗрдВ рдЪрд░рд┐рддреНрд░ рдЖрдВрджреЛрд▓рди else: if (move_left and not move_right): if (lv.x > -WALK_MAX_VELOCITY): lv.x-=AIR_ACCEL*step elif (move_right and not move_left): if (lv.x < WALK_MAX_VELOCITY): lv.x+=AIR_ACCEL*step else: var xv = abs(lv.x) xv-=AIR_DEACCEL*step if (xv<0): xv=0 lv.x=sign(lv.x)*xv if (lv.y<0): new_anim="jumping" else: new_anim="falling"
рдЪрд░рд┐рддреНрд░ рдЖрдВрджреЛрд▓рди if (new_siding_left!=siding_left): if (new_siding_left): get_node("sprite").set_scale( Vector2(-1,1) ) else: get_node("sprite").set_scale( Vector2(1,1) ) siding_left=new_siding_left
рдПрдиреАрдореЗрд╢рди рдмрджрд▓реЗрдВ if (new_anim!=anim): anim=new_anim get_node("anim").play(anim)
рдЬрдореАрди рдХреА рдЧрддрд┐ рд▓рд╛рдЧреВ рдХрд░реЗрдВ if (found_floor): floor_h_velocity=s.get_contact_collider_velocity_at_pos(floor_index).x lv.x+=floor_h_velocity
рдЗрд╕ рд╕рдм рдЧрдбрд╝рдмрдбрд╝ рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ lv+=s.get_total_gravity()*step s.set_linear_velocity(lv)
рдЕрд░реЗ, рдпрд╣ рдбрд░рд╛рд╡рдиреА рдереАред
рдЕрдм рд╕рднреА рдмрд┐рдирд╛ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдПрдХ рд╕рд╛рде: extends RigidBody2D var anim="" var siding_left=false var jumping=false var stopping_jump=false var WALK_ACCEL = 300.0 var WALK_DEACCEL= 300.0 var WALK_MAX_VELOCITY= 400.0 var GRAVITY = 900.0 var AIR_ACCEL = 300.0 var AIR_DEACCEL= 300.0 var JUMP_VELOCITY=460 var STOP_JUMP_FORCE=200.0 var MAX_FLOOR_AIRBORNE_TIME = 0.15 var airborne_time=1e20 var floor_h_velocity=0.0 func _integrate_forces(s): var lv = s.get_linear_velocity() var step = s.get_step() var new_anim=anim var new_siding_left=siding_left var move_left = Input.is_action_pressed("move_left") var move_right = Input.is_action_pressed("move_right") var jump = Input.is_action_pressed("jump") lv.x-=floor_h_velocity floor_h_velocity=0.0 var found_floor=false var floor_index=-1 for x in range(s.get_contact_count()): var ci = s.get_contact_local_normal(x) if (ci.dot(Vector2(0,-1))>0.6): found_floor=true floor_index=x if (found_floor): airborne_time=0.0 else: airborne_time+=step var on_floor = airborne_time < MAX_FLOOR_AIRBORNE_TIME if (jumping): if (lv.y>0): jumping=false elif (not jump): stopping_jump=true if (stopping_jump): lv.y+=STOP_JUMP_FORCE*step if (on_floor): if (move_left and not move_right): if (lv.x > -WALK_MAX_VELOCITY): lv.x-=WALK_ACCEL*step elif (move_right and not move_left): if (lv.x < WALK_MAX_VELOCITY): lv.x+=WALK_ACCEL*step else: var xv = abs(lv.x) xv-=WALK_DEACCEL*step if (xv<0): xv=0 lv.x=sign(lv.x)*xv if (not jumping and jump): lv.y=-JUMP_VELOCITY jumping=true stopping_jump=false if (lv.x < 0 and move_left): new_siding_left=true elif (lv.x > 0 and move_right): new_siding_left=false if (jumping): new_anim="jumping" elif (abs(lv.x)<0.1): new_anim="idle" else: new_anim="run" else: if (move_left and not move_right): if (lv.x > -WALK_MAX_VELOCITY): lv.x-=AIR_ACCEL*step elif (move_right and not move_left): if (lv.x < WALK_MAX_VELOCITY): lv.x+=AIR_ACCEL*step else: var xv = abs(lv.x) xv-=AIR_DEACCEL*step if (xv<0): xv=0 lv.x=sign(lv.x)*xv if (lv.y<0): new_anim="jumping" else: new_anim="falling" if (new_siding_left!=siding_left): if (new_siding_left): get_node("sprite").set_scale( Vector2(-1,1) ) else: get_node("sprite").set_scale( Vector2(1,1) ) siding_left=new_siding_left if (new_anim!=anim): anim=new_anim get_node("anim").play(anim) if (found_floor): floor_h_velocity=s.get_contact_collider_velocity_at_pos(floor_index).x lv.x+=floor_h_velocity lv+=s.get_total_gravity()*step s.set_linear_velocity(lv)
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЗ рд▓рд┐рдП PS, рдЖрдкрдХреЛ рдмреЙрдХреНрд╕ рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ -> рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ -> Physics2D -> рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЧреНрд░реЗрд╡рд┐рдЯреА
рдЯрд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдореБрдЭреЗ рдЯрд╛рдЗрд▓рд╕реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рддреИрдпрд╛рд░ рджреГрд╢реНрдп (рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ) рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдЖрдк рдЯрд╛рдЗрд▓рд╕реЗрдЯ рд╕реЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рд╕реЗ рд╕реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдиреЛрдб рдЯрд╛рдЗрд▓рдореИрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЯрд╛рдЗрд▓рд╕реЗрдЯ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ (рдЯрд╛рдЗрд▓рд╕реЗрдЯ -> рд▓реЛрдб -> рдЯрд╛рдЗрд▓реНрд╕рд╕реЗрдЯ.рдПрдХреНрд╕рдПрдордПрд▓)ред рдЖрдк рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд▓ / рдЬрд╝рдореАрди рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрддрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдореИрдВ рдЕрдЧрд▓реЗ рдкрд╛рда рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
рдмреЛрдирд╕! рдкреГрд╖реНрдарднреВрдорд┐ рдЬреЛрдбрд╝рдиреЗ!
рдПрдХ рдирдпрд╛ рджреГрд╢реНрдп рдмрдирд╛рдПрдБред рдЗрд╕рдореЗрдВ "Node" ParallaxBackground рдЬреЛрдбрд╝реЗрдВред рдЗрд╕реЗ parallax_bg рдХрд╣реЗрдВ рдФрд░ рдЗрд╕реЗ parallax_bg.xml рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред
рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП ParallaxLayer рдХреЗ 4 рдЯреБрдХрдбрд╝реЗ рдмрдирд╛рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЖрдХрд╛рд╢, рдмрд╛рджрд▓, рдорд╛рдЙрдВрдЯ_1, рдорд╛рдЙрдВрдЯ 2 рдХрд╣реЗрдВред рддрджрдиреБрд╕рд╛рд░, рдЖрдХрд╛рд╢, рдмрд╛рджрд▓ рдФрд░ рдкрд╣рд╛рдбрд╝ред
рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдХрд╛ рд╕рдВрдХрд▓реНрдк 800x600 рд╣реИ (рджреГрд╢реНрдп рдореЗрдВ рджреЗрдЦреЗрдВ -> рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ -> рдкреНрд░рджрд░реНрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕)ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ "рдиреЛрдб" рдХреЛ рдорд┐рд░рд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ 800.0 рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ - Y рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдорд┐рд░рд░рд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВред "Node" рдмрд╛рджрд▓реЛрдВ рдХреЗ рд╕реНрдХреЗрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓реЗрдВред Mount_1, Mount_2 рд╕реЗ 0.1.1; рдХреНрд░рдорд╢рдГ 0.2.1 рдФрд░ 0.4.1ред

рдПрдХ рдЖрдХрд╛рд╢ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдиреЛрдб рдЖрдХрд╛рд╢ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ред рдФрд░ рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рд╕реЗ рд╕рдм рдХреБрдЫ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдмрд╛рд░, рдХрд╛рд░реНрдп рдХреНрд╖реЗрддреНрд░ рдкрд░ 2 рд╕реНрдЯреНрд░рд┐рдкреНрд╕ рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдЫрд╡рд┐ рдХреЗ рдХрд╛рд░реНрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг, рд╕реНрдХреЗрд▓ред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЦреНрдп рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдЗрд╕рдХреА рджрд░реНрдкрдг рдЫрд╡рд┐ рднреА рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
рдмрд╛рджрд▓реЛрдВ рдХреЛ рдиреЛрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 3 рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдЕрдВрдд рдореЗрдВ 6 рд╣реЛ, рджрд░реНрдкрдг рдлрд┐рд░ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реЛрдЧрд╛, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 12 рдмрд╛рджрд▓ рд╣реЛрдВрдЧреЗ!
рдЕрдм рд╣рдо рдкрд░реНрд╡рддреЛрдВ рдХреЛ Node Mount_1 рдФрд░ Mount_2 рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЪрд▓рд┐рдП рдмрдврд╝рддреЗ рд╣реИрдВред

рджреГрд╢реНрдп рдмрдЪрд╛рдУред рдУрдкрди рд╕реНрдЯреЗрдЬред xmlред рдФрд░ рд╣рдорд╛рд░реЗ рдЪрд░рдг рдореЗрдВ рд╣рдо рдмреИрдХрдбреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде "рдкреНрд▓рд╕ рд╕рд╛рдЗрди" рдПрдХ рджреГрд╢реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдФрд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдЧреЗрдордкреНрд▓реЗ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡реАрдбрд┐рдпреЛ:
рдЫреЛрдЯреЗ FAQ (рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛):
- рдпрджрд┐ рдЪрд░рд┐рддреНрд░ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИрдВ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИрдВ
- рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ - рдХреНрдпрд╛ рдПрдиреАрдореЗрд╢рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдирд┐рд╖реНрдХреНрд░рд┐рдп, рдЪрд▓рд╛рдиреЗ рдФрд░ рдЧрд┐рд░рдиреЗ рдХреЗ рдкрд╛рд╢ рдПрдирд┐рдореЗрд╢рди рджреЗрдЦреЗрдВред
- рдЪрд░рд┐рддреНрд░ рдлрд░реНрд╢ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ / рджреАрд╡рд╛рд░реЛрдВ, рдЫрдд рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ - рддреНрд░рд┐рдХреЛрдг CollisionPolygon2D рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
- рдЪрд░рд┐рддреНрд░ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рд╡рдЯ рдореЗрдВ / рдЙрдирдХреЗ рдКрдкрд░ - рддреАрд░ CollisionShape2D рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
рдбрд╛рдЙрдирд▓реЛрдб:
рдЕрдВрдд рддрдХ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХрдорд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреАрдПрдо рдХреЛ рд▓рд┐рдЦреЗрдВред рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рджреЗрдЦреЗрдВ!