рдП-рдлрд╝реНрд░реЗрдо рд╕рдореАрдХреНрд╖рд╛ рд▓реЗрдЦ



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

рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ?


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

рдЗрд╕рдХреЗ рд▓рд┐рдП, рдП-рдлреНрд░реЗрдо рддреАрди рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдж рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

A- рдлреНрд░реЗрдо HTML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рдХрдИ рдмреБрдирд┐рдпрд╛рджреА рдП-рдлрд╝реНрд░реЗрдо рддрддреНрд╡, рдЬреИрд╕реЗ рдХрд┐ рджреГрд╢реНрдп, рдХреИрдорд░рд╛, рдмреЙрдХреНрд╕, рдХреНрд╖реЗрддреНрд░, рдЖрджрд┐ рдХреЛ рдЙрдкрд╕рд░реНрдЧ a рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреГрд╢реНрдп рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рди рдЖрдЗрдЯрдо рдХреЛ рдХрд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдП-рдлреНрд░реЗрдо (0.8.0) рд╡рд░реНрддрдорд╛рди рдореЗрдВ v0 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

<a-scene> <a-box position="-1 0.5 -3" rotation="0 45 0" color="#4CC3D9"></a-box> <a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere> </a-scene> 

рдХреЛрдб рдХрд╛ рдпрд╣ рдЫреЛрдЯрд╛ рд╕рд╛ рдЯреБрдХрдбрд╝рд╛ рдПрдХ WebGL рд╕реАрди рдЦреАрдВрдЪреЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗ: рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрдпреВрдм рдФрд░ рдПрдХ рдЧреЛрд▓рд╛ред рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рджреЛ рддрддреНрд╡реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдЕрдиреНрдп рдкреНрд░рд╛рдЗрдореЗрдЯреАрдЬрд╝ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рджреГрд╢реНрдп рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: <a-circle>, a-cone>, a-рд╕рд┐рд▓реЗрдВрдбрд░> <a-dodecahronron,> <-icosahedron> , <a-octahedron>, <a-plane>, <a-ring>, <a-tetrahedron>, <a-torus-knot>, <a-torus>, <a-triangle> ред рдП-рдлреНрд░реЗрдо рдореЗрдВ рднреА рдХреБрдЫ рдЕрдиреНрдп рддрддреНрд╡ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:

  • <a-camera> - рдПрдХ рдХреИрдорд░рд╛ рдмрдирд╛рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдХреИрдорд░рд╛ (PerspectiveCamera) рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • <-obj-model>, <a-collada-model>, <a-gltf-model> - рд╡реЗ рд╕рднреА рдЗрд╕реА рдкреНрд░рд╛рд░реВрдк рдХреЗ рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  • <a-рдХрд░реНрд╕рд░> - рдПрдХ рдРрд╕рд╛ рддрддреНрд╡ рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: рдХреНрд▓рд┐рдХ, рдорд╛рд░реНрдЧрджрд░реНрд╢рди, рдЖрджрд┐ред рдХрд░реНрд╕рд░ рдХреИрдорд░реЗ рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдмрдВрдзрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреЗрдЦрдиреЗ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╣реЛрдЧрд╛ред
  • <a-image> - рдПрдХ рд╡рд┐рдорд╛рди рдкрд░ рдЪрдпрдирд┐рдд рдЫрд╡рд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (<a-plane>)ред
  • <a-link> рдПрдХ рдЯреИрдЧ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ 3D рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдПред
  • <a-sky> - рдордВрдЪ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕рд┐рд▓реЗрдВрдбрд░ рдЬреЛ рдЖрдкрдХреЛ 360 рдлрд╝реЛрдЯреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╛ рдЖрдк рдмрд╕ рдЗрд╕реЗ рдХреБрдЫ рд░рдВрдЧ рд╕реЗ рднрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • <a-sound> - рдПрдХ рджрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдзреНрд╡рдирд┐ рд╕реНрд░реЛрдд рдмрдирд╛рддрд╛ рд╣реИред
  • <a-text> - рд╕рдкрд╛рдЯ рдкрд╛рда рдЦреАрдВрдЪрддрд╛ рд╣реИред
  • <a-video> - рдкреНрд▓реЗрди рдкрд░ рд╡реАрдбрд┐рдпреЛ рдЪрд▓рд╛рддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдо DOM рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рдирдХ DOM API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ querySelector, getElementById, appendChild, рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдП-рдлреНрд░реЗрдо рдИрд╕реАрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ



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

рдП-рдлрд╝реНрд░реЗрдо рдореЗрдВ, рдпрд╣ рдкреИрдЯрд░реНрди рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗред рдХрд┐рд╕реА рднреА рдП-рдлрд╝реНрд░реЗрдо рддрддреНрд╡ - <-a-scene>, <a-box>, <a-sphere>, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, <-a- рдПрдВрдЯрд┐рдЯреА> рддрддреНрд╡ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред рдЙрдирдХрд╛ рдирд╛рдо рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рддрддреНрд╡ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд░рдг рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЛ <-a- рдЗрдХрд╛рдИ> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП <-box> :

 <a-entity geometry="primitive: box; width: 1; height: 1; depth: 1"></a-entity> 

рдЬреНрдпрд╛рдорд┐рддрд┐ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╣ рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕реЗ <-a- рдЗрдХрд╛рдИ> рдЗрдХрд╛рдИ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред <-рдирд┐рдХрд╛рдп> рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ (рд╡реИрд╢реНрд╡рд┐рдХ рдЕрд░реНрдереЛрдВ рдореЗрдВ), рдФрд░ рдЬреНрдпрд╛рдорд┐рддрд┐ рдШрдЯрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдШрди рдпрд╛ рдХреБрдЫ рдФрд░ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдПрдХ рдЕрдиреНрдп рдШрдЯрдХ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЬреНрдпрд╛рдорд┐рддрд┐ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░рд╛ рдШрди рдзрд╛рддреБ рдХреА рддрд░рд╣ рдЪрдордХреЗрдЧрд╛, рдЪрд╛рд╣реЗ рдЙрд╕рдореЗрдВ рдХреЛрдИ рдмрдирд╛рд╡рдЯ рд╣реЛ, рдЖрджрд┐ред рд╢реБрджреНрдз рдереНрд░реА.рдЬреЗ рдореЗрдВ, рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬреНрдпрд╛рдорд┐рддрд┐, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдпрд╣ рд╕рдм рдХреИрд╢ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдордп рдмрдЪрд╛рддрд╛ рд╣реИред

рдП-рдлреНрд░реЗрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 AFRAME.registerComponent('hello-world', { init: function () { console.log('Hello, World!'); } }); 

рдлрд┐рд░ рдЗрд╕ рдШрдЯрдХ рдХреЛ рджреГрд╢реНрдп, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрддреНрд╡ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 <a-entity hello-world></a-entity> 

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

  • рдЕрджреНрдпрддрди - рдЗрдирд┐рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рджреЛрдиреЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдШрдЯрдХ рдХреА рдХрд┐рд╕реА рднреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордпред
  • рдирд┐рдХрд╛рд▓реЗрдВ - рдПрдХ рдШрдЯрдХ рдпрд╛ рдЗрдХрд╛рдИ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдпрджрд┐ рдЖрдк DOM рд╕реЗ <-a-рдПрдВрдЯрд┐рдЯреА> рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рд╕рднреА рдкреБрд░реНрдЬрд╝реЗ рдХреЙрд▓ рд╣рдЯрд╛рдП рдЬрд╛рдПрдВрдЧреЗред
  • рдЯрд┐рдХ - рд╣рд░ рдмрд╛рд░ рджреГрд╢реНрдп рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рд░реЗрдВрдбрд░ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ requestAnimaitonFrame рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
  • рдПрдХ рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд░ рдмрд╛рд░ рдЯреЙрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдЦреЗрд▓ - рдЬрдм рджреГрд╢реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рджреГрд╢реНрдп рдХреЗ рдмрд╛рджред рдЦреЗрд▓рдирд╛ ();
  • рдард╣рд░рд╛рд╡ - рд╣рд░ рдмрд╛рд░ рдЬрдм рдПрдХ рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рджреГрд╢реНрдп рдХреЗ рдмрд╛рджред рдард╣рд░рд╛рд╡ ();
  • updateSchema - рд╕реНрдХреАрдорд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд░ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдП-рдлреНрд░реЗрдо рдореЗрдВ рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕рд░реНрдХрд┐рдЯреНрд░реА рд╣реИред рдЖрд░реЗрдЦ рдШрдЯрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 AFRAME.registerComponent('my-component', { schema: { arrayProperty: {type: 'array', default: []}, integerProperty: {type: 'int', default: 5} } } 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдореЗрд░реЗ рдШрдЯрдХ рдореЗрдВ рджреЛ рдЧреБрдг рд╣реЛрдВрдЧреЗ, arrayProperty рдФрд░ integerProperty ред рдЙрдиреНрд╣реЗрдВ рдШрдЯрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 <a-entity my-component="arrayProperty: 1,2,3; integerProperty: 7"></a-entity> 

рдЖрдк рдЗрди рдЧреБрдгреЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 AFRAME.registerComponent('my-component', { schema: { arrayProperty: {type: 'array', default: []}, integerProperty: {type: 'int', default: 5} }, init: function () { console.log(this.data); } } 

рдЗрдХрд╛рдИ рд╕реЗ рдПрдХ рдШрдЯрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд getAttribute рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдП-рдлреНрд░реЗрдо рдЗрдХрд╛рдИ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╕рдордп, рдпрд╣ рди рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛, рдмрд▓реНрдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯред

  console.log(this.el.getAttribute('my-component')); // {arrayProperty: [1,2,3], integerProperty: 7} 

рд▓рдЧрднрдЧ рдЙрд╕реА рддрд░реАрдХреЗ рд╕реЗ, рдЖрдк рдПрдХ рдШрдЯрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

 this.el.setAttribute('my-component',{arrayProperty: [], integerProperty: 5}) 

рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рд╕рд┐рд╕реНрдЯрдо рдХреАред рдП-рдлреНрд░реЗрдо рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдЙрд╕реА рддрд░рд╣ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдШрдЯрдХ:

 AFRAME.registerSystem('my-system', { schema: {}, init: function () { console.log('Hello, System!'); }, }); 

рдШрдЯрдХ рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рд╕рд░реНрдХрд┐рдЯ рдФрд░ рдХреЙрд▓рдмреИрдХ рд╣реИред рдХреЗрд╡рд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 5 рд╣реИрдВ: init, play, pause, tick, tock ред рдЗрдХрд╛рдИ рдХреЗ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рджреГрд╢реНрдп рдореЗрдВ рдЬреБрдбрд╝ рдЬрд╛рдПрдЧрд╛ред

 this.el.sceneEl.systems['my-system']; 

рдпрджрд┐ рдШрдЯрдХ рдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдорд╛рди рдирд╛рдо рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред

 AFRAME.registerSystem('enemy', { schema: {}, init: function () {}, }); AFRAME.registerComponent('enemy', { schema: {}, init: function () { const enemySystem = this.system; }, }); 

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

A- рдлреНрд░реЗрдо рдореЗрдВ рд╕рдВрдЪрд╛рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ


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

 this.el.emit('start-game', {level: 1}, false); 

рдЖрдк рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо addEventListener рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ :

 const someEntity = document.getElementById('someEntity'); someEntity.addEventListener('start-game', () => {...}); 

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

 this.el.sceneEl.addEventListener('start-game', () => {...}); 

рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ


рд╢рд╛рдпрдж, рдпрд╣ рд╕рдм рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдП-рдлрд╝реНрд░реЗрдо рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдПрдХ рд╕рдореАрдХреНрд╖рд╛ рд╣реИ рдФрд░ рдореИрдВ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкрд╛рдардХ рдХреЛ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕рднреА рдЬреНрдЮрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓ рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/hi439416/


All Articles