Skip to content

EasyPeasyLemonSqueezy/MadCat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

NutEngine

NutEngine - 2D Π΄Π²ΠΈΠΆΠΎΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ³Ρ€. Π’ Π΅Π³ΠΎ основС Π»Π΅ΠΆΠΈΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ MonoGame, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ созданиС ΠΎΠΊΠ½Π°, ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Ρ†ΠΈΠΊΠ», отрисовка ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΈ воспроизвСдСниС Π·Π²ΡƒΠΊΠ° ΠΈ ΠΌΡƒΠ·Ρ‹ΠΊΠΈ.

Π”Π΅ΠΌΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ рСпозитория.
Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹, Π² Ρ‚ΠΎΠΌ числС Π²ΠΈΠ΄Π΅ΠΎ дСмонстрация ΠΈ прСзСнтация с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ список возмоТностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π΄Π²ΠΈΠΆΠΎΠΊ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСна Π΄Π°Π»Π΅Π΅:

  1. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/Π‘Ρ†Π΅Π½Ρ‹ - организация ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ состояниями ΠΈΠ³Ρ€Ρ‹ (Π³Π»Π°Π²Π½ΠΎΠ΅ мСню, ΠΏΠ°ΡƒΠ·Π°, ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ).
  2. Π“Ρ€Π°Ρ„ сцСны - ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΈΡ… отрисовка.
  3. Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹, Анимации, ΠœΠ΅Ρ‚ΠΊΠΈ ΠΈ ΠžΠ±Π»Π°ΡΡ‚ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ - Ρ€Π°Π±ΠΎΡ‚Π° с графичСскими ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ - ΡƒΠ·Π»Π°ΠΌΠΈ Π³Ρ€Π°Ρ„Π° сцСны.
  4. Π€ΠΈΠ·ΠΈΠΊΠ° - ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ физичСского повСдСния Ρ‚Π΅Π», взаимодСйствия ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ.
  5. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.
  6. ΠšΠ°ΠΌΠ΅Ρ€Ρ‹ - ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²ΠΈΠ΄ΠΎΠΌ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ сцСну.
  7. Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π²ΠΎΠ΄Π° - Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ.
  8. Машина состояний - ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ состояниями ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².
  9. Π£ΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ NutPacker - ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ тСкстуры Π² атласы ΠΈ прСдоставляСт доступ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ тСкстурам Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π²ΠΈΠΆΠΊΠ°.

Для дСмонстрации пСрСчислСнных особСнностСй Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ нСсколько тСхничСских Π΄Π΅ΠΌΠΎ. КаТдоС дСмонстрируСт Ρ€Π°Π·Π½Ρ‹Π΅ стороны Π΄Π²ΠΈΠΆΠΊΠ° ΠΈ Π΅Π³ΠΎ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΆΠ°Π½Ρ€Π°Ρ….

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, сцСны (Application, Scene Stack)

MonoGame прСдоставляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ класс прилоТСния, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Ρ†ΠΈΠΊΠ», ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ подробности. Π’ NutEngine Π²Π²Π΅Π΄Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ класс прилоТСния, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ возмоТности класса Game ΠΈΠ· MonoGame.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΈΠ³Ρ€ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ состояния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π³Π»Π°Π²Π½ΠΎΠ΅ мСню, ΠΏΠ°ΡƒΠ·Π°, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, ΡΡŽΠΆΠ΅Ρ‚Π½Ρ‹ΠΉ Ρ€ΠΎΠ»ΠΈΠΊ. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ присуща своя игровая Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ свои Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΡ€ΠΈ этом Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ этими состояниями. Π’Π°ΠΊΠΈΠ΅ состояния общСпринято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ сцСнами.

Класс прилоТСния занимаСтся Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ этих сцСн.

ВсС сцСны хранятся Π½Π° стСкС, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π½ΠΎΠ²ΠΎΠΉ сцСнС, сохранив Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ старой (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, это ΡƒΠ΄ΠΎΠ±Π½ΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°ΡƒΠ·Ρ‹). ВсСгда обновляСтся состояниС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠΉ сцСны, Ρ‡Ρ‚ΠΎ находится Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄Π²ΠΈΠΆΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс сцСны для построСния всСх сцСн Π² своСй ΠΈΠ³Ρ€Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ опрСдСляСт Π² Π½ΠΈΡ…, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ сцСну Π² стСк, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π½ΠΎΠ²ΠΎΠ΅ состояниС, ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π²Π·ΡΡ‚ΡŒ сцСну ΠΈΠ· стСка, Π²Π΅Ρ€Π½ΡƒΠ²ΡˆΠΈΡΡŒ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ.

alt text
Рисунок 1. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π‘Ρ†Π΅Π½Π°.

Π“Ρ€Π°Ρ„ сцСны (Scene Graph)

ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ срСдствами MonoGame происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π² ΠΊΠΎΠ΄Π΅ описываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² отрисовки Π² Π½ΡƒΠΆΠ½ΠΎΠΌ порядкС. Когда ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠΈΡ€ состоит ΠΈΠ· большого количСства элСмСнтов ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ΡΡ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ становится Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС, Π° Π΄Π²ΠΈΠΆΠΎΠΊ займСтся всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ.

Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сцСны присутствуСт Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π³Ρ€Π°Ρ„ сцСны - это Π΄Π΅Ρ€Π΅Π²ΠΎ элСмСнтов находящихся Π½Π° сцСнС (изобраТСния, Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, тСкст). Π£Π·Π΅Π» (Node) - элСмСнт этого Π΄Π΅Ρ€Π΅Π²Π°.

ΠšΠΎΡ€Π΅Π½ΡŒ этого Π³Ρ€Π°Ρ„Π° Π² сцСнС называСтся World, ΠΈ ΠΎΠ½, ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ·Π΅Π», ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² сСбС ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты. ΠŸΠΎΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ измСнСния сразу ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅. ΠŸΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ сцСны происходит ΠΎΠ±Ρ…ΠΎΠ΄ всСго Π΄Π΅Ρ€Π΅Π²Π°, Π²ΠΎ врСмя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ происходит вся отрисовка.

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ содСрТится Z-индСкс, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΡƒΠ·Π»Ρ‹ ΠΏΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ Π³Ρ€Π°Ρ„Π°, для этого всС Π΄Π΅Ρ‚ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² порядкС возрастания ΠΏΠΎ Z-индСксу, Π° Π·Π°Ρ‚Π΅ΠΌ:

  1. РСкурсивно ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π΅Ρ‚ΠΈ с Z < 0.
  2. ΠžΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π».
  3. РСкурсивно ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π΅Ρ‚ΠΈ с Z > 0.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π΅Ρ‚ΠΈ с Z < 0 Π±ΡƒΠ΄ΡƒΡ‚ отрисованы Π΄ΠΎ самого ΡƒΠ·Π»Π°, ΠΈ ΠΈΠ·-Π·Π° этого ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Π·Π°Π΄Π½Π΅ΠΌ ΠΏΠ»Π°Π½Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π³Ρ€Π°Ρ„Π° сцСны ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ отрисовка пСрсонаТа с Π΅Π³ΠΎ экипировкой. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ элСмСнты ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹ становятся β€œΠ΄Π΅Ρ‚ΡŒΠΌΠΈβ€ ΡƒΠ·Π»Π° пСрсонаТа. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для пСрСмСщСния всСх элСмСнтов достаточно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самого пСрсонаТа, достаточно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ экипировки. Π’ΠΎ ΠΆΠ΅ касаСтся ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ΠΎΠ² ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, примСняСмых ΠΊ ΡƒΠ·Π»Π°ΠΌ.

ВсС прСобразования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс Matrix2D. Π’ MonoGame присутствовали ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Π½ΠΎ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ рассчитаны Π½Π° Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ прСобразования, Ρ‡Ρ‚ΠΎ Π² Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ слишком большим Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ расходам, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ интСрфСйс взаимодСйствия с этими ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ оставлял ΠΆΠ΅Π»Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† трансформации.

alt text
Рисунок 2. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ отрисовки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°Ρ€Ρ‚Ρ‹, состоящиС ΠΈΠ· ΠΊΠ»Π΅Ρ‚ΠΎΠΊ). Вакая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Π΄Π²ΠΈΠΆΠΊΠ΅ остаСтся.

Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹, Анимации, ΠœΠ΅Ρ‚ΠΊΠΈ ΠΈ ΠžΠ±Π»Π°ΡΡ‚ΠΈ тСкстуры

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои Ρ‚ΠΈΠΏΡ‹ ΡƒΠ·Π»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΡƒΠ·Π»Π°, Π½ΠΎ Π² Π΄Π²ΠΈΠΆΠΊΠ΅ ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ нСсколько Ρ‚ΠΈΠΏΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с изобраТСниями:

  1. Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹ (Sprite).
  2. Анимации (Animation).
  3. ΠœΠ΅Ρ‚ΠΊΠΈ (Label).

Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ тСкстуру для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта ΠΊΡ€Π°ΠΉΠ½Π΅ нСэффСктивно ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΠΎ памяти, поэтому спрайты ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ хранят Π² сСбС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ изобраТСния.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ изобраТСния - ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ тСкстуру с ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, это Ρ‡Π°ΡΡ‚ΡŒ тСкстуры.

Π‘ΠΏΡ€Π°ΠΉΡ‚ - статичноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Класс, унаслСдованный ΠΎΡ‚ ΡƒΠ·Π»Π° Π³Ρ€Π°Ρ„Π° сцСны, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с изобраТСниями.

Анимация - Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Класс, унаслСдованный ΠΎΡ‚ спрайта, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Ρ…Ρ€Π°Π½ΡΡ‰ΡƒΡŽ ΠΊΠ°Π΄Ρ€Ρ‹, ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ NutPacker'Π°, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ сказано Π½ΠΈΠΆΠ΅. Анимация Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² зависимости ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ) ΠΈ отрисовываСт Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ изобраТСния.

ΠœΠ΅Ρ‚ΠΊΠ° - ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ тСкста Π½Π° экранС.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ модСль классов:
alt text
Рисунок 3. Π“Ρ€Π°Ρ„ сцСны, Π‘ΠΏΡ€Π°ΠΉΡ‚, Анимация, ΠžΠ±Π»Π°ΡΡ‚ΡŒ тСкстуры.

Π€ΠΈΠ·ΠΈΠΊΠ° (Physics)

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°ΠΆΠ΅ самой простой ΠΈΠ³Ρ€Ρ‹, ΠΏΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² использовании Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… физичСских Π·Π°ΠΊΠΎΠ½ΠΎΠ². ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ сСбС ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ Π°Π½Π°Π»ΠΎΠ³ Pinball ΠΈΠ· Windows, ΠΈ Ρ‚ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ встаСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ. Π’Π°ΠΌ Π½ΡƒΠΆΠ½Π° гравитация, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ столкновСнии ΡˆΠ°Ρ€ΠΈΠΊΠ° с прСпятствиСм ΠΎΠ½ отскакивал ΠΎΡ‚ Π½Π΅Π³ΠΎ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΡ‚ Ρ€Π°Π·Π½Ρ‹Ρ… прСпятствий этот ΡˆΠ°Ρ€ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΡΠΊΠ°ΠΊΠΈΠ²Π°Ρ‚ΡŒ с Ρ€Π°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. А Ρ‚Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹, ΠΊΠΎΠ³Π΄Π° ваш ΡˆΠ°Ρ€ΠΈΠΊ катится ΠΏΠΎ ΡˆΠ΅Ρ€ΠΎΡ…ΠΎΠ²Π°Ρ‚ΠΎΠΉ повСрхности, ΠΎΠ½ замСдлялся, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. ИмСнно Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ этих Π·Π°ΠΊΠΎΠ½ΠΎΠ² ΠΈ занимаСтся Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ нашСго Π΄Π²ΠΈΠΆΠΊΠ°.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ„ΠΈΠ·ΠΈΠΊΠΈ:

  1. Π€ΠΈΠ³ΡƒΡ€Ρ‹. (Shapes) Π•ΡΡ‚ΡŒ 2 Ρ‚ΠΈΠΏΠ° Ρ„ΠΈΠ³ΡƒΡ€:
    • AABB - (Axis-Aligned Bounding Box) Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎ осям ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, задаСтся ΠΎΠ΄Π½ΠΈΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΊ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΠΊΡ€Π°ΡŽ
    • Circle - ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ, задаСтся ΠΎΠ΄Π½ΠΈΠΌ числом - радиусом

ВсС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс IShape, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ - сСктор. Π‘Π΅ΠΊΡ‚ΠΎΡ€ - это AABB ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описан Π²ΠΎΠΊΡ€ΡƒΠ³ этой Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для быстрой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚Π΅Π» Π½Π° столкновСния, Ρ‚.ΠΊ. Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² вашСй ΠΈΠ³Ρ€Π΅ скорСС всСго Π½Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ, Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ быстрыС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ пСрСсСчСния сСкторов, Ρ‡Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ пСрСсСчСния слоТных Ρ„ΠΈΠ³ΡƒΡ€.

  1. Π’Π΅Π»Π°. (Rigid Bodies) Π’Π΅Π»ΠΎ - ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСтся:
  • Π€ΠΈΠ³ΡƒΡ€ΠΎΠΉ
  • Массой
  • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ
  • Бсылкой Π½Π° Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° этого Ρ‚Π΅Π»Π°

И содСрТит Π² сСбС состояния:

  • ΠŸΠΎΠ·ΠΈΡ†ΠΈΡŽ
  • Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ
  • УскорСниС
  • Π‘ΠΈΠ»Ρƒ
  • Эпсилон

Эпсилон - опрСдСлСнная константа, всС силы, скорости, ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ мСньшС этого числа Π½Π΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Он Π±Ρ‹Π» внСсСн Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Ρ‚Π΅Π»ΠΎ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ эффСкта β€œΠ΄Ρ€ΠΎΠΆΠΈβ€ Ρƒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π΅Π». Π­Ρ‚ΠΎΡ‚ эффСкт Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ нСбольшиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ довольно сильно ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅Π»Π° Π·Π° ΠΎΠ΄Π½Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΈ Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π’ связи с этим ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ эффСкт Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Ρ‚Π΅Π»ΠΎ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ проваливаСтся, Π° Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ выталкиваСтся. Если ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ смСщСниС, минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ силу ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΠΊ Ρ‚Π΅Π»ΠΎ, ΠΌΡ‹ смоТСм ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого эффСкта.

Π’Π°ΠΊΠΆΠ΅ содСрТит Π² сСбС 2 события:

  1. ΠŸΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ всСх Ρ‚Π΅Π»
  2. ΠŸΡ€ΠΈ столкновСнии с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚Π΅Π»ΠΎΠΌ

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» - ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π΄Π²ΠΈΠΆΠΊΠ°, Π² Π½Π΅ΠΌ содСрТатся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ характСристики Ρ‚Π΅Π»Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ, ΡƒΠΏΡ€ΡƒΠ³ΠΎΡΡ‚ΡŒ, коэффициСнты трСния - покоя ΠΈ скольТСния.

Масса являСтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ. На самом Π΄Π΅Π»Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ хранится обратная масса (1/m), Π° сама масса высчитываСтся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π΅, это Π±Ρ‹Π»ΠΎ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ всС Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° массу, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ массу, ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ рассмотрСниС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с ΠΈΠ³Ρ€ΠΎΠΉ Pinball, Π² этой ΠΈΠ³Ρ€Π΅ СдинствСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отталкиваСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π΅Π» - это ΡˆΠ°Ρ€ΠΈΠΊ. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ нСприятно, Ссли Π±Ρ‹ вмСстС с ΡˆΠ°Ρ€ΠΈΠΊΠΎΠΌ ΠΎΡ‚ΡΠΊΠ°ΠΊΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΠΎΡ‚ стСнки, стСнка Π±Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π»Π°ΡΡŒ. ИмСнно для Ρ‚Π°ΠΊΠΈΡ… ситуаций ΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Ρ‹ статичСскиС Ρ‚Π΅Π»Π°.

БтатичСскоС Ρ‚Π΅Π»ΠΎ - Ρ‚Π΅Π»ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅Π»Π°, Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅Π»Π° Π½Π° Π½Π΅Π³ΠΎ Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚, Ρ‚.Π΅. ΠΏΡ€ΠΈ столкновСнии ΡˆΠ°Ρ€ΠΈΠΊΠ° - ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ(Ρ‚Π²Π΅Ρ€Π΄ΠΎΠ³ΠΎ) Ρ‚Π΅Π»Π° со стСнкой - статичСским Ρ‚Π΅Π»ΠΎΠΌ, ΡˆΠ°Ρ€ΠΈΠΊ - отскочит ΠΎΡ‚ Π½Π΅Π΅, Π° стСнка останСтся Π½Π° мСстС.

НС слоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ статичСским Ρ‚Π΅Π»Π°ΠΌ масса Π½Π΅ Π½ΡƒΠΆΠ½Π°, ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ статичСскоС Ρ‚Π΅Π»ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π΅Π»ΠΎ с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ массой.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Ρ‚Π΅Π»Π°ΠΌΠΈ:

  1. МоТно Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со свойствами класса ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, силу ΠΈ ускорСниС, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС эти дСйствия Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ сразу, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ этого Π½Π΅ рСкомСндуСтся.
  2. МоТно ΠΏΡ€ΠΈΠ΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π΅Π»Π°ΠΌ ΠΈΠΌΠΏΡƒΠ»ΡŒΡ (ApplyImpulse), Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ‚Π΅Π»Π° измСняСтся сразу, Π° Π²ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ всСх Ρ‚Π΅Π».
  3. Или ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ силы(ApplyForce), Π² этом случаС ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ‚Π΅Π»Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, Ρ‚.Π΅. ApplyForce лишь Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅Ρ‚ силы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΊ Ρ‚Π΅Π»Ρƒ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ IntegrateForces.
  4. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅Π» Π΅Ρ‰Π΅ Π΄ΠΎ обновлСния, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ IntegrateVelocity.

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои Ρ‚ΠΈΠΏΡ‹ Ρ‚Π΅Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс IBody, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ - Ссли Π²Π°ΠΌ захочСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ с совсСм нСстандартной Ρ„ΠΈΠ·ΠΈΠΊΠΎΠΉ, Π½ΠΎ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π²ΠΎ всСх тонкостях Ρ€Π°Π±ΠΎΡ‚Ρ‹ физичСского Π΄Π²ΠΈΠΆΠΊΠ°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ лишь ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для измСнСния повСдСния Ρ‚Π΅Π», ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ сил.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΊΠΎΠ½Ρ‹ Ρ„ΠΈΠ·ΠΈΠΊΠΈ для вашСго ΡˆΠ°Ρ€ΠΈΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ Π½Π΅ΠΌΡƒ достаточной силы, этот ΡˆΠ°Ρ€ΠΈΠΊ мСнял свою Ρ„ΠΎΡ€ΠΌΡƒ Π½Π° стрСлу, ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π» Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ Π² соотвСтствии с этими измСнСниями.
Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ просто Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ лишь Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ - примСнСния силы ΠΈ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°, ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

  1. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ‚Π΅Π». (Bodies Manager) ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ‚Π΅Π», ΠΊΠ°ΠΊ понятно ΠΈΠ· названия, управляСт всСми Ρ‚Π΅Π»Π°ΠΌΠΈ, Ρ‚.Π΅. Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° ваши Ρ‚Π΅Π»Π° дСйствовала Ρ„ΠΈΠ·ΠΈΠΊΠ° - Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΈΡ… Π² ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ‚Π΅Π».

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ‚Π΅Π» выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ порядкС ΠΊΠΎ всСм Ρ‚Π΅Π»Π°ΠΌ: * ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ столкновСния (CalculateCollisions) * ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ силы (IntegrateForces) * Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ скорости Ρƒ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ²ΡˆΠΈΡ…ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΈΡ… направлСния) (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ) (ResolveCollisions) * Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ‚Ρ€Π΅Π½ΠΈΠΈ (Ρ‚ΠΎΠΆΠ΅ Π² ResolveCollisions) * Π Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ (Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π΅Π»Π° Π΄Ρ€ΡƒΠ³ ΠΈΠ· Π΄Ρ€ΡƒΠ³Π° Ссли ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ»ΠΈΡΡŒ) (PositionAdjustment) * Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ события Ρƒ Ρ‚Π΅Π» (OnUpdateAll, OnCollisionAll)

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ(столкновСниС Ρ‚Π΅Π») ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π° этапа - Π΄Π²Π΅ Ρ„Π°Π·Ρ‹:

  • Широкая Ρ„Π°Π·Π° (Broad Phase) - БоставлСниС ΠΏΠ°Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ, благодаря использованию ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° - ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° Ρ‚Π΅Π», ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π° этапС добавлСния Ρ‚Π΅Π», Π° Π½Π΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°. Π’.Π΅. ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ добавляСтС Ρ‚Π΅Π»ΠΎ, Π²Ρ‹ автоматичСски составляСтС всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Ρ‹ элСмСнтов.
  • Узкая Ρ„Π°Π·Π° (Narrow Phase) - Π£ΠΆΠ΅ конкрСтная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΎ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Π»ΠΈ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.
  1. ΠšΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€.
    ΠšΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€ Π² нашСм Π΄Π²ΠΈΠΆΠΊΠ΅, это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅Π»Π°ΠΌΠΈ. Π—Π΄Π΅ΡΡŒ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎ 3 основных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: ΠžΠ±Π»Π°ΡΡ‚ΡŒ пСрСсСчСния (IntersectionArea) - ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ пСрСсСчСниС Ρ‚Π΅Π»: Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ пСрСсСчСния ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ. Коллизия (Collision) - ΠžΠ±ΡŠΠ΅ΠΊΡ‚ хранящий Π² сСбС 2 Ρ‚Π΅Π»Π° ΠΈ ΠΈΡ… ΠΎΠ±Π»Π°ΡΡ‚ΡŒ пСрСсСчСния. ИмСнно здСсь находятся ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ самой ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ события ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ Π‘Π°ΠΌ ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€ - статичСский класс Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТатся ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Collide для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ 2 Ρ‚Π΅Π»Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ пСрСсСчСния Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для быстрой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚Π΅Π» Π½Π° пСрСсСчСниС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ пСрСсСчСния.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Ρ‚Π΅Π», Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π½Π° ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ областСй пСрСсСчСния, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Collide, с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ IBody, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅ ΡƒΠΆΠ΅ вызываСтся конкрСтная функция для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ„ΠΈΠ³ΡƒΡ€.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ модСль классов:
alt text
Рисунок 4. Π€ΠΈΠ·ΠΈΠΊΠ°.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Components)

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ слоТной ΠΈΠ³Ρ€Ρ‹ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ количСство Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² становится ΠΎΡ‡Π΅Π½ΡŒ большим, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ, ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π²Π΅Ρ‰ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ классС Π±Ρ‹Π»ΠΎ Π±Ρ‹ нСэффСктивно.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π΅ΡˆΠ°ΡŽΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ наслСдованиС. Бтроится общая иСрархия классов для всСх Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НаслСдованиС Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π΅ являСтся Π»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ иСрархия наслСдования получаСтся ΠΎΡ‡Π΅Π½ΡŒ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠΉ ΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ.

ВмСсто этого цСлСсообразно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… частСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ называСтся β€œΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»ΡŒβ€, ΠΈ ΠΎΠΏΡ‹Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² ΠΈΠ³Ρ€Π°Ρ… Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅.

Боздавая Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выполняСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ), ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… частСй.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° этапС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ ΠΈΠ³Ρ€Ρ‹ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ/Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ΅Π½ΡΡ‚ΡŒ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° прямо Π²ΠΎ врСмя ΠΈΠ³Ρ€Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΄Π°Π΅Ρ‚ большСй гибкости.

Π—Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², состоящих ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Он Π΄Π΅Π»Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΈ бСзопасной. УпрощаСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Часто Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ Ρ€Π°Π½ΡŒΡˆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ…. НапримСр, сначала Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ½Π°Ρ‡Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ отставаниС отрисовки ΠΎΡ‚ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ процСсса Π½Π° ΠΊΠ°Π΄Ρ€. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ зависимости ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², поэтому зависимости ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ явно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π±Ρ‹Π»ΠΈ отсортированы Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ сортировки примСняСтся топологичСская сортировка, которая ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΡƒΠ³ΠΈ Π³Ρ€Π°Ρ„Π° Π±Ρ‹Π»ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² направлСниях, Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‰ΠΈΡ… зависимостям.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Ρƒ нас имССтся Π³Ρ€Π°Ρ„:
alt text
Рисунок 5. Π“Ρ€Π°Ρ„ зависимостСй ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π’ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

alt text
Рисунок 6. Π“Ρ€Π°Ρ„ зависимостСй ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², с упорядочСнными Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ.

ГарантируСтся, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зависит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ гравитация, Ссли Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° вашС Ρ‚Π΅Π»ΠΎ дСйствовала гравитация - просто Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ Π½Π΅ΠΌΡƒ этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. ΠŸΡ€ΠΈ этом Ρƒ вас всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π³Ρ€Π°Π²ΠΈΡ‚Π°Ρ†ΠΈΠΈ, ΠΈ Π² этом случаС сила Π³Ρ€Π°Π²ΠΈΡ‚Π°Ρ†ΠΈΠΈ пСрСстанСт Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ - ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, позиция, ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€, Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ модСль:
alt text
РисункС 7. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Π°Ρ модСль.

ΠšΠ°ΠΌΠ΅Ρ€Ρ‹ (Camera)

ΠšΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠΈΡ€. ΠšΠ°ΠΌΠ΅Ρ€Π° Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ трансформации, которая опрСдСляСт ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΊΠ°ΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ порядком примСнСния трансформаций ΠΈ, соотвСтствСнно, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ:

  1. SRT (OrthographicSRTCamera) - спСрва происходит ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Scale), Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ (Rotate), Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ (Translate) Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ.
  2. TRS (OrthographicTRSCamera) - спСрва происходит ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ (Translate), Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ (Rotate), Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Scale). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°, этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡƒΠΆΠ΅ Π²Π΅Π΄Π΅Ρ‚ сСбя Π½Π΅ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ обычная ΠΊΠ°ΠΌΠ΅Ρ€Π°. Π’.ΠΊ. спСрва выполняСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅, всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°(ΠΌΠΈΡ€Π°), Π° Π½Π΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹.

Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΡΡΠ½ΠΈΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅: ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ опускаСтС ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ ΠΈ Π² это ΠΆΠ΅ врСмя ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚Π΅ Π΅Π΅, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС:

  • SRT - спСрва ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚, Ρ‚.Π΅. Π³Π΄Π΅ Π±Ρ‹ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Ρ‚Π΅Π»ΠΎ, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹.
  • TRS - спСрва ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅, ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° самого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚.Π΅. ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π²ΠΎΠΊΡ€ΡƒΠ³ своСй оси.

Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹. Или ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свою ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ унаслСдовав Π΅Π΅ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Camera2D.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ модСль классов:
alt text
Рисунок 8. ΠšΠ°ΠΌΠ΅Ρ€Ρ‹.

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π²ΠΎΠ΄Π° (Input)

Π’ MonoGame присутствуСт базовая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π²ΠΎΠ΄Π° ΠΈΠ³Ρ€ΠΎΠΊΠ°, Π½ΠΎ Π² Π½Π΅ΠΉ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. НапримСр, Π½Π΅Ρ‚ возмоТности ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π»ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΆΠ°Ρ‚ΠΈΠ΅(release) клавиши Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ ΠΎΠ½Π°. Π’ нашСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π»ΠΈ Ρ€Π΅ΡˆΠ΅Π½Ρ‹. Π’Π°ΠΊΠΆΠ΅ Π² MonoGame Π½Π΅Ρ‚ возмоТности ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ состояниС, Ρ‡Ρ‚ΠΎ заставляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ постоянно.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π² MonoGame Π±Ρ‹Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы состояния (KeyboardState) ΠΈ структура Key, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Π±Ρ‹Π»ΠΈ взяты Π·Π° основу.

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ состоит ΠΈΠ· Π΄Π²ΡƒΡ… связанных ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

  1. ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° (Keyboard), состоит ΠΈΠ·:
  • ΠœΠ΅Ρ‚ΠΎΠ΄ Update - ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‰ΠΈΠΉ состояниС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся автоматичСски ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ класса прилоТСния. Π—Π΄Π΅ΡΡŒ измСняСтся Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.
  • Бвойство State - Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹
  1. БостояниС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ (KeyboardState).
    Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π² сСбС 2 свойства:
  • Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ (CurrentState)
  • ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ состояниС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ (PrevState)

А Ρ‚Π°ΠΊΠΆΠ΅ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ данная клавиша ΠΈΠ»ΠΈ нСсколько клавиш Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ (IsKeyDown)
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π° Π»ΠΈ клавиша ΠΈΠ»ΠΈ нСсколько клавиш Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ (IsKeyUp)
  • МоТно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив ΠΈΠ· всСх Π½Π°ΠΆΠ°Ρ‚Ρ‹Ρ… клавиш (GetPressedKeys)
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Ρ‹Π»Π° Π»ΠΈ Π½Π°ΠΆΠ°Ρ‚Π° опрСдСлСнная клавиша Π½Π° этой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° (Ρ‚.Π΅. Π΄ΠΎ этого ΠΎΠ½Π° Π±Ρ‹Π»Π° Π½Π΅ Π½Π°ΠΆΠ°Ρ‚Π°) (IsKeyPressedRightNow)
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Ρ‹Π»Π° Π»ΠΈ ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π° опрСдСлСнная клавиша Π½Π° этой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° (Ρ‚.Π΅. Π΄ΠΎ этого ΠΎΠ½Π° Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π°) (IsKeyReleasedRightNow)

Π’Π°ΠΊΠΆΠ΅ присутствуСт индСксатор - ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎ клавишС ΡƒΠ·Π½Π°Ρ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ ΠΎΠ½Π° сСйчас.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ модСль класса:
alt text
Рисунок 9. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π²ΠΎΠ΄Π°.

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ (StateMachine)

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π² ΠΈΠ³Ρ€Π°Ρ… ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ‚ΠΊΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ состояния. НапримСр, пСрсонаТи. Они ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ, Π±Π΅Π³Π°Ρ‚ΡŒ, ΠΏΡ€Ρ‹Π³Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ дСйствия. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‡Π΅Ρ‚ΠΊΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими состояниями (Π² состоянии ΠΏΡ€Ρ‹ΠΆΠΊΠ° Π½Π΅ получаСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚). Бостояния ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° ΠΈΠ»ΠΈ ΠΆΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Π΄Π²ΠΈΠΆΠΊΠ΅ Π΅ΡΡ‚ΡŒ классы ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° ΠΈ состояния.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄Π²ΠΈΠΆΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свои состояния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс состояния. Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ состояниСм Ρ‡Π°Ρ‰Π΅ всСго ассоциируСтся какая-Ρ‚ΠΎ анимация, Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² состояниС. Π’Π°ΠΊΠΆΠ΅ состояниС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ³Ρ€ΠΎΠ²ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с этим состояниСм.

Когда всС состояния Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, остаСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ состояниС.

alt text
Рисунок 10. ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ (StateMachine).

Π£ΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊ тСкстур - NutPacker

Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° тСкстур - вСроятно, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΉ этап Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ графичСских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ сСбС ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Ρƒ нас Π΅ΡΡ‚ΡŒ простая 2D ΠΈΠ³Ρ€Π°, с нСбольшим количСством тСкстур. Π”Π°ΠΆΠ΅ нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этих тСкстур ΠΌΠ°Π»ΠΎ, ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° всСх Π²Π°ΡˆΠΈΡ… тСкстур Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ. И это Π΅Ρ‰Π΅ Π½Π΅ всС, всС эти тСкстуры Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ участкС памяти, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ процСссору ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ кэш для хранСния этих тСкстур.

РСшСниС всСх этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ довольно просто - ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π·ΡΡ‚ΡŒ ΠΈ ΡΠΊΠ»Π΅ΠΈΡ‚ΡŒ всС тСкстуры Π² ΠΎΠ΄Π½Ρƒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ, Π° для обращСния ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ тСкстурС Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈΠ· ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ Π½Π° этапС склСивания Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅(Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшСС мСсто) склСиваниС Ρ‚Π°ΠΊΠΈΡ… тСкстур называСтся ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΎΠΉ.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π² качСствС Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹: xml/json, Π½ΠΎ это Π½Π΅ совсСм ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  1. ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ этих тСкстур Π²Π°ΠΌ придСтся ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ этот Ρ„Π°ΠΉΠ», Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ большом количСствС - довольно мСдлСнная опСрация.
  2. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ отсутствуСт какая-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½, Ρ‚.Π΅. Ссли ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ тСкстуры Π²Ρ‹ ΠΎΡˆΠΈΠ±Π΅Ρ‚Π΅ΡΡŒ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ, Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎΠ± этом Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π±Ρ‹Π» использован ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ способ - вмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² тСкстовых Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΌΡ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠΎΠ΄, с этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ слоТныС ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΈΠ· тСкстур, Ρ‚.Π΅. Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ Π±Π»ΠΎΠΊΠ°ΠΌ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ сразу ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (dll), Ρ‡Ρ‚ΠΎ позволяСт Π²Π°ΠΌ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π΄Π°ΠΆΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², достаточно просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ссылки Π½Π° Π½ΠΈΡ….

Для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ тСкстур Π² NutPacker Π±Ρ‹Π» использован сторонний ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ SpriteSheetPacker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π» написан Π½Π° C#, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

NutPacker ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ интСрфСйс ΠΈ позволяСт Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†, помСчая ΠΈΡ… ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ спрайтов (ISpriteSheet), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ мноТСство ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ/Ρ‚Π°ΠΉΠ»ΠΎΠ² (ITileSet) ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π³Ρ€ΡƒΠΏΠΏΡƒ спрайтов (ISpriteGroup) с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Рассмотрим какая катСгория для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ:

  1. ISpriteSheet: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для формирования Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΉ, содСрТит Π² сСбС:
    • БтатичСский массив ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² - областСй изобраТСния
    • Бвойство с количСством этих ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² (Length)
    • Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ‚ΠΎΡ€, для обращСния ΠΊ этому ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΡƒ ΠΏΠΎ индСксу.
  2. ITileSet содСрТит Π² сСбС мноТСство статичСских свойств - ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², ΠΈΠ»ΠΈ ΠΆΠ΅ ITileSet, Ρ‚.Π΅. мноТСства Ρ‚Π°ΠΊΠΈΡ… тСкстур ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ спрайта.
  3. ISpriteGroup - класс содСрТащий Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя опрСдСлСния классов Ρ‚Π°Π±Π»ΠΈΡ† спрайтов, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ограничСния Π½Π° ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ атлас:

  • Максимальная высота/ΡˆΠΈΡ€ΠΈΠ½Π° (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - 216)
  • ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
  • Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Ρ‹Π» ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π΄Π²ΠΎΠΉΠΊΠΈ
  • ΠžΡ‚ΡΡ‚ΡƒΠΏ ΠΌΠ΅ΠΆΠ΄Ρƒ тСкстурами Π²Π½ΡƒΡ‚Ρ€ΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ отсутствуСт)

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ³Ρ€Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π΅Ρ‰Π΅ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ€, Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ вынСсти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ интСрфСйсы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ - NutPackerLib.

Π’Π°ΠΊΠΆΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса гСнСрируСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ - OriginalNameAttribute, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится ΠΎΠ΄Π½Π° строка с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈ использовании Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… тСкстур Π² зависимости ΠΎΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π° уровня ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… условий, Π² этом случаС Ρƒ вас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΉΡ‚ΠΈ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Π°ΠΌ классы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

  1. β€œAn Introduction to Physically Based Modeling: Rigid Body Simulation II - Nonpenetration Constraints”, by David Baraff
  2. β€œPhysics for Game Programmers”, by Grant Palmer
  3. β€œAn Introduction to the Collision Detection Algorithms”, by Francisco Madera
  4. β€œReal-Time Collision Detection”, by Christer Ericson
  5. β€œGame Coding Complete”, by Mike McShaffry, David Graham
  6. β€œComputational Geometry”, by Mark de Berg, Otfried Cheong, Marc van Kreveld, Mark Overmar https://opengl-tutorial.org/assets/faq_quaternions/index.html
  7. https://gameprogrammingpatterns.com
  8. https://monogame.net/documentation & https://github.com/MonoGame/MonoGame
  9. https://github.com/craftworkgames/MonoGame.Extended
  10. https://randygaul.net & https://github.com/RandyGaul/tinyheaders & https://github.com/RandyGaul/ImpulseEngine
  11. spritesheetpacker.codeplex.com
  12. https://github.com/libgdx/libgdx

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages