Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ³Ρ€ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 22

Автор Майкл ΠœΠΎΡ€Ρ€ΠΈΡΠΎΠ½

monsterSprite.move(-5, 10);

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ спрайт пСрСмСщаСтся Π½Π° 5 пиксСлСй Π²Π»Π΅Π²ΠΎ ΠΈ 10 пиксСлСй Π²Π½ΠΈΠ·. ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ смСщСния Π·Π°Π΄Π°ΡŽΡ‚ пСрСмСщСния Π²Π»Π΅Π²ΠΎ ΠΈΠ»ΠΈ Π²Π²Π΅Ρ€Ρ…, Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ – Π²ΠΏΡ€Π°Π²ΠΎ ΠΈΠ»ΠΈ Π²Π½ΠΈΠ·. 3. ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ c ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Sprite ассоциировано ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ paint() рисуСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ мСстС:

monsterSprite.paint(g).

Π’ этом ΠΊΠΎΠ΄Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Graphics с ΠΈΠΌΠ΅Π½Π΅ΠΌ g, Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² любой ΠΈΠ³Ρ€Π΅.

Π’Ρ‹ познакомились с основами спрайтовой Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π² MIDP API. Нам ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ класс GameCanvas, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ благодаря Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ»Π°Π²Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса GameCanvas

Если Π±Ρ‹ Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ спрайтовой Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, ΠΈ создали Π±Ρ‹ ΠΌΠΈΠ΄Π»Π΅Ρ‚ с использованиСм ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ класса Canvas,TO Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅Ρ€Ρ‹Π²ΠΈΡΡ‚ΡƒΡŽ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ. Π’Π°ΠΊΠΎΠΉ эффСкт Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вслСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ экран очищаСтся. Π˜Π½Π°Ρ‡Π΅ говоря, ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΡΡ‚ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ стираниС происходит нСпосрСдствСнно Π½Π° экранС, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ эффСкт прСрывности Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ. Для наглядности ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС Ρ„ΠΈΠ»ΡŒΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π΄Ρ€Π°ΠΌΠΈ отобраТаСтся Π±Π΅Π»Ρ‹ΠΉ экран. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ иллюзия двиТСния Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ, ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Ρ€Π΅ΠΉΠΌΠ°ΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ пустой экран.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΡƒ, ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠ°ΠΊ «двойная буфСризация». ΠŸΡ€ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ выполняСтся стираниС ΠΈ рисованиС Π½Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ экранС. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ рисования Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выводится нСпосрСдствСнно Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ экран. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ видимая очистка экрана Π½Π΅ выполняСтся, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π³Π»Π°Π΄ΠΊΡƒΡŽ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ. На рис. 5.6 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ±ΡƒΡ„Π΅Ρ€Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠ΅ΠΉ с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Рис. 5.6. Анимация с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ устраняСт эффСкт прСрывистости, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΈ использовании ΠΎΠ΄Π½ΠΎΠ±ΡƒΡ„Π΅Ρ€Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ...

Π’ ΠΊΠΎΠΏΠΈΠ»ΠΊΡƒ Π˜Π³Ρ€ΠΎΠΊΠ°

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

На рис. 5.6 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΡƒΡ„Π΅Ρ€ Π² памяти для выполнСния всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… дСйствий. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΌ программирования, ΠΎΠ΄Π½Π°ΠΊΠΎ всС дСлаСтся ΠΎΡ‡Π΅Π½ΡŒ просто (благодаря MIDP 2.0 API).

ΠšΡ€ΠΎΠΌΠ΅ стандартного класса Canvas Π² MIDP API сущСствуСт класс GameCanvas, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами класса GameCanvas, ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ класс холста ΠΎΡ‚ класса GameCanvas, послС Ρ‡Π΅Π³ΠΎ Π²Ρ‹ смоТСтС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Однако Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ всС построСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π±ΡƒΡ„Π΅Ρ€Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° экран, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ flushGraphics().

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ Π² памяти класса GameCanvas. Когда Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Graphics, ассоциированным с холстом, всС построСния Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Π±ΡƒΡ„Π΅Ρ€Π΅, Π½Π° экранС измСнСния Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄Π½Ρ‹. Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° flushGraphic() позволяСт ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ построСно Π² памяти, Π½Π° экранС. ΠŸΡ€ΠΈ этом содСрТимоС Π±ΡƒΡ„Π΅Ρ€Π° Π½Π΅ измСняСтся ΠΈ Π½Π΅ стираСтся, Π° просто выводится Π½Π° экран.

...

Π’ ΠΊΠΎΠΏΠΈΠ»ΠΊΡƒ Π˜Π³Ρ€ΠΎΠΊΠ°

Когда Π²Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса GameCanvas, ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΡƒΡ„Π΅Ρ€ заполняСтся пиксСлями Π±Π΅Π»ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°.

Класс GameCanvas Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ряд интСрСсных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ создании ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, эффСктивная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π²ΠΎΠ΄Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅. А ΠΏΠΎΠΊΠ° – Π²Ρ‹ достаточно Π·Π½Π°Π΅Ρ‚Π΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π²Π½ΡƒΡŽ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΌΠΈΠ΄Π»Π΅Ρ‚Π΅.

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ UFO

Π₯отя ΠΌΠΎΠΆΠ½ΠΎ привСсти массу ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ спрайтовой Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, UFO (ΠΠ›Πž) β€“ Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½ всСгда. Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² вашСй ΠΈΠ³Ρ€Π΅ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π΅ΠΎΠΏΠΎΠ·Π½Π°Π½Π½Ρ‹ΠΉ Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ – это ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ всСгда! Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности MIDP для создания ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΎΠΏΠΎΠ·Π½Π°Π½Π½Ρ‹ΠΉ Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ экрану. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ UFO дСмонстрируСт основы спрайтовой Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ эту ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΡƒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. По ΠΌΠ΅Ρ€Π΅ изучСния ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΊΠ½ΠΈΠ³ΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ интСрСсными возмоТностями классов Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ MIDP.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ UFO ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ спрайт ΠΠ›Πž, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π½ΠΎ пСрСмСщаСтся ΠΏΠΎ Ρ‡Π΅Ρ€Π½ΠΎΠΌΡƒ экрану. Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΠ›Πž – это ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π»Π΅Ρ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ срСдства класса Sprite для измСнСния полоТСния спрайта Π½Π° экранС. ВСроятно, самый Π²Π°ΠΆΠ½Ρ‹ΠΉ аспСкт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ UFO – это созданиС ΠΏΠΎΡ‚ΠΎΠΊΠ° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обновляСт ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ спрайт ΠΠ›Πž Ρ‡Π΅Ρ€Π΅Π· Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΠΎΡ‚ΠΎΠΊ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ называСтся ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ – это сСрдцС ΠΈ Π΄ΡƒΡˆΠ° любой мобильной ΠΈΠ³Ρ€Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ анимация.

НаписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

Как ΠΈ ΠΏΡ€ΠΈ написании Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ², самоС интСрСсноС начинаСтся ΠΏΡ€ΠΈ создании ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ класса холста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС называСтся UFOCanvas. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ‡Π»Π΅Π½Ρ‹-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса UFOCanvas:

private Display display;

private boolean sleeping;

private long frameDelay;

private Random rand;

private Sprite ufoSprite;

private int ufoXSpeed, ufoYSpeed;

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ display ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠ° Π²Π°ΠΌ ΠΏΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌ, ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с дисплССм. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ sleeping опрСдСляСт, Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π»ΠΈ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Ρ†ΠΈΠΊΠ». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, присвоив этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ frameDelay тСсно связана с ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ частоту Π΅Π³ΠΎ выполнСния. Если Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Ρ‚ΠΎ эта пСрСмСнная содСрТит число миллисСкунд ΠΌΠ΅ΠΆΠ΄Ρƒ итСрациями Ρ†ΠΈΠΊΠ»Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ это число Π² количСство Ρ„Ρ€Π΅ΠΉΠΌΠΎΠ², для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π½Π° Π½Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ 1. НапримСр, Ссли Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° framedelay Ρ€Π°Π²Π½Π° 40 мс (ΠΈΠ»ΠΈ 0.04 с), Ρ‚ΠΎ частота ΠΊΠ°Π΄Ρ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° 25. Аналогично, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ частоту ΠΊΠ°Π΄Ρ€ΠΎΠ² Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ 1 Π½Π° частоту ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 1000. НапримСр:

1/30 ΠΊΠ°Π΄Ρ€/с = 0.333333 с = 33 мс

Π§Π»Π΅Π½-пСрСмСнная класса rand – это экзСмпляр стандартного Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл MIDP, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ двиТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ экрану. Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΠ›Πž хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ufoSprite, которая являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Sprite. Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ спрайта хранится ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ самого спрайта – Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ufoSpeed.

...

Π‘ΠΎΠ²Π΅Ρ‚ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ

Π‘ практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ спрайты ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ классы, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΎΡ‚ класса Sprite. Однако ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ спрайт ΠΠ›Πž достаточно прост, Π½Π΅Ρ‚ нСобходимости ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ спрайтов, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ Π² ΠΊΠ½ΠΈΠ³Π΅, Π±ΡƒΠ΄ΡƒΡ‚ созданы ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ классы, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΎΡ‚ Sprite.

Π§ΡƒΡ‚ΡŒ Ρ€Π°Π½ΡŒΡˆΠ΅ я упомянул, Ρ‡Ρ‚ΠΎ пСрСмСнная frameDelay опрСдСляСт частоту ΠΊΠ°Π΄Ρ€ΠΎΠ² Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° UFO. Π­Ρ‚Π° пСрСмСнная инициализируСтся Π² конструкторС ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°:

frameDelay = 33;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Ρ€Π°Π½Π΅Π΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ соотвСтствуСт частотС 30 ΠΊΠ°Π΄Ρ€ΠΎΠ²/с. Если Π²Ρ‹ вспомнитС, ΠΎ Ρ‡Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ Π³Π»Π°Π²Ρ‹, Ρ‚ΠΎ исходя ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ соврСмСнныС ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΡƒΡŽ частоту, ΠΎΠ½Π° обСспСчиваСт ΠΏΠ»Π°Π²Π½ΡƒΡŽ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ случай, ΠΊΠΎΠ³Π΄Π° тСстированиС Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ устройствС Π²Π°ΠΆΠ½ΠΎ. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° UFO располоТСна Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ start(). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ спрайт:

ufoXSpeed = ufoYSpeed = 3;

try {

ufoSprite = new Sprite(Image.createImage("/Saucer.png"));

ufoSprite.setPosition(0, 0);

}

catch (IOException e) {

System.err.println("Failed loading image!");

}

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ X ΠΈ Y скорости спрайта Ρ€Π°Π²Π½Ρ‹ 3, поэтому спрайт Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚Ρ€ΠΈ пиксСля Π²Π½ΠΈΠ· ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ Π·Π° ΠΎΠ΄Π½Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ. ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° скорости говорят ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ спрайт пСрСмСщаСтся Π²Π²Π΅Ρ€Ρ… ΠΈ Π²Π»Π΅Π²ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Sprite, ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ созданноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ конструктору этого класса. ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ спрайта Ρ€Π°Π²Π½ΠΎ (0,0) β€“ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» экрана. ΠŸΠΎΡ‚ΠΎΠΊ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ устанавливаСтся Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ start():

sleeping = false;

Thread t = new Thread(this);

t.start();

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ sleeping присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ. Π—Π°Ρ‚Π΅ΠΌ создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Thread, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ пСрСдаСтся холст с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° this. ΠŸΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ start(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСт ΠΈ приостанавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Π’Π°ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ срСдства остановки ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, для Ρ‡Π΅Π³ΠΎ прСдусмотрСн ΠΌΠ΅Ρ‚ΠΎΠ΄ stop():

public void stop() {

// ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ

sleeping = true;

}

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ, для этого достаточно ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ sleeping Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true. Π˜Π³Ρ€ΠΎΠ²ΠΎΠΉ Ρ†ΠΈΠΊΠ» располоТСн Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ run():

while (!sleeping) {

update();

draw(g);

try {

Thread.sleep(frameDelay);

}

catch (InterruptedException ie) {}

}

Π˜Π³Ρ€ΠΎΠ²ΠΎΠΉ Ρ†ΠΈΠΊΠ» – это Ρ†ΠΈΠΊΠ» while, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ sleeping Π»ΠΎΠΆΠ½ΠΎ. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ update(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обновляСт Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ, послС Ρ‡Π΅Π³ΠΎ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ draw(), ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. БтатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ sleep() класса Thread ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, которая опрСдСляСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ frameDelay. Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° управляСт Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ update() вызываСтся Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ. Π˜Π½Π°Ρ‡Π΅ говоря, ΠΌΠ΅Ρ‚ΠΎΠ΄ update() вызываСтся 30 Ρ€Π°Π· Π² сСкунду, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ частота смСны ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² ΠΌΠΈΠ΄Π»Π΅Ρ‚Π΅ UFO Ρ€Π°Π²Π½Π° 30 ΠΊΠ°Π΄Ρ€ΠΎΠ²/с. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΠ΅Ρ‚ΠΎΠ΄ update() ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° случайноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ скорости Π»Π΅Ρ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ полоТСния. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ измСняСт ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: