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

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

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

0, 2, 2, 2, 2, 5, 15, 15, 15, 15, 15, 15, 6, 2, 2, 0,

0, 2, 2, 2, 2, 7, 10, 1, 1, 1, 1, 1, 16, 2, 2, 0,

0, 2, 2, 2, 2, 2, 14, 1, 1, 1, 1, 1, 16, 2, 2, 0,

0, 2, 2, 2, 2, 2, 7, 10, 1, 1, 1, 1, 16, 2, 2, 0,

0, 2, 2, 2, 2, 2, 2, 14, 1, 1, 1, 1, 16, 2, 2, 0,

0, 2, 2, 2, 2, 2, 2, 14, 1, 9, 10, 1, 16, 2, 2, 0,

0, 2, 2, 5, 15, 6, 2, 14, 1, 11, 12, 1, 16, 2, 2, 0,

0, 2, 2, 14, 1, 16, 2, 7, 13, 13, 13, 13, 8, 2, 2, 0,

0, 2, 2, 7, 13, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,

0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,

0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

К соТалСнию, этот ΠΊΠΎΠ΄ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ особого смысла, Ссли Π½Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ассоциированноС с этим Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½Ρ‹ΠΌ слоСм. На рис. 11.3 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ элСмСнты слоя, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для построСния Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ слоя.

Рис. 11.3. Π€ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ слой ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Ссли вмСсто индСксов ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ изобраТСния

Если Π²Ρ‹ индСксам поставитС Π² соотвСтствиС изобраТСния, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π½Π° рис. 11.2; ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ячСйкам с индСксом 0 ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Π΅ области Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ слоя, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² этих областях Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ. ΠšΠ°Ρ€Ρ‚Ρƒ слоя-Π±Π°Ρ€ΡŒΠ΅Ρ€Π° Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΈ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ края Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ слоя ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹. ΠšΠ°Ρ€Ρ‚Π° ΠΏΡ€Π΅Π³Ρ€Π°Π΄

Π‘Π»ΠΎΠΉ-Π±Π°Ρ€ΡŒΠ΅Ρ€ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ выводится ΠΏΠΎΠ²Π΅Ρ€Ρ… Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ слоя. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° слоя-Π±Π°Ρ€ΡŒΠ΅Ρ€Π° выводится ΠΏΠΎΠ²Π΅Ρ€Ρ… Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ слоя. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΈΠ΄Π»Π΅Ρ‚ Wanderer 2 Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ этот слой ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ спрайта пСрсонаТа. Π˜Π½Π°Ρ‡Π΅ говоря, пустыС ячСйки слоя Π±Π°Ρ€ΡŒΠ΅Ρ€Π° ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Ρ‚Π΅ области ΠΊΠ°Ρ€Ρ‚Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π³Π΅Ρ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ.

На рис. 11.4 ΠΏΠΎΠΊΠ°Π·Π°Π½ слой-Π±Π°Ρ€ΡŒΠ΅Ρ€, Ρ‡Π΅Ρ€Π½Ρ‹Π΅ области ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π΅ΠΌ областям, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… пСрсонаТ ΠΌΠΎΠΆΠ΅Ρ‚ свободно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ.

Рис. 11.4. Π’ слоС-Π±Π°Ρ€ΡŒΠ΅Ρ€Π΅ для ограничСния ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ спрайта гСроя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²ΠΎΠ΄Π°, скалы ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ слоя-Π±Π°Ρ€ΡŒΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Π° – пСрсонаТ ΠΌΠΎΠΆΠ΅Ρ‚ свободно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ. Π”Π°ΠΆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° содСрТит Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Π΅ области, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ свободу пСрСдвиТСния гСроя. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΊΠ°Ρ€Ρ‚Ρ‹ слоя, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° рис. 11.4:

-1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1,

–1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1,

–1, 21, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 22, 1,

–1, 18, 0, 5, 5, 5, 5, 8, 0, 0, 8, 0, 0, 0, 20, -1,

–1, 18, 0, 0, 0, 0, 0, 0, 0, 16, 8, 0, 0, 0, 20, 1,

–1, 18, 7, 7, 7, 11, 7, 8, 0, 0, 10, 5, 0, 0, 20, -1,

–1, 18, 0, 11, 0, 0, 11, 7, 7, 12, 0, 0, 0, 0, 20, -1,

–1, 18, 0, 7, 7, 7, 0, 11, 12, 8, 0, 0, 0, 0, 20, 1,

–1, 18, 0, 11, 12, 0, 15, 10, 0, 8, 0, 0, 0, 0, 20, 1,

–1, 18, 0, 0, 13, 0, 10, 5, 5, 9, 0, 0, 0, 0, 20, -1,

–1, 18, 7, 10, 5, 9, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1,

–1, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, -1,

–1, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1,

–1, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1,

–1, 23, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, -1,

–1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΊΠ°Ρ€Ρ‚Ρ‹ слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π½Π΅ имСя прСдставлСния ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ изобраТСния стоят Π·Π° индСксами. На рис. 11.5 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ изобраТСния, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… создаСтся Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ слой-Π±Π°Ρ€ΡŒΠ΅Ρ€.

Рис. 11.5. МоТно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ выглядит слой-Π±Π°Ρ€ΡŒΠ΅Ρ€, Ссли Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ элСмСнты Π² Π½ΡƒΠΆΠ½ΠΎΠΌ порядкС

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

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ с созданиСм Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ элСмСнтов слоя Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. А ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚Π΅ ΠΊ Π½Π΅ΠΉ, посмотритС Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ выглядят Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ слой ΠΈ слой-Π±Π°Ρ€ΡŒΠ΅Ρ€ вмСстС (рис. 11.6).

Рис. 11.6. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Wanderer 2 состоит ΠΈΠ· Π΄Π²ΡƒΡ… слоСв – Ρ„ΠΎΠ½Π° ΠΈ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°

Рисунок 11.6 Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ касаСтся пустых элСмСнтов слоСв. ΠŸΡƒΡΡ‚Ρ‹Π΅ элСмСнты Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ слоя ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ элСмСнтами слоя-Π±Π°Ρ€ΡŒΠ΅Ρ€Π°, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ сквозь пустыС элСмСнты слоя-ΠΏΡ€Π΅Π³Ρ€Π°Π΄Ρ‹ Π²ΠΈΠ΄Π½Ρ‹ Ρ‚Ρ€Π°Π²Π° ΠΈ пСсок Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ слоя. Π‘Π»ΠΎΠΈ – это ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Wanderer 2, это отраТаСтся Π² ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π΄Π°Π»Π΅Π΅.

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

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Wanderer 2 Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти ряд ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для управлСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ слоСм, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ слоСв, ΠΎΠΊΠ½ΠΎΠΌ Π²ΠΈΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ΄Ρ‹. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° Wanderer 2:

private LayerManager layers;

private int xView, yView; //Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π²ΠΈΠ΄Π° ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° слоСв

private TiledLayer backgroundLayer;

private TiledLayer barrierLayer;

private int waterDelay, waterTile;

private Sprite personSprite;

ΠŸΠ΅Ρ€Π²Π°Ρ пСрСмСнная – это ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ слоСв, Π² Π½Π΅ΠΉ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ xView ΠΈ yView хранят ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ полоТСния ΠΎΠΊΠ½Π° Π²ΠΈΠ΄Π° – Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ области слоСв. Если Π²Ρ‹ вспомнитС, ΠΎ Ρ‡Π΅ΠΌ шла Ρ€Π΅Ρ‡ΡŒ Ρ€Π°Π½Π΅Π΅, ΠΎΠΊΠ½ΠΎ Π²ΠΈΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для отобраТСния Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ области слоСв, ΠΏΡ€ΠΈ этом ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ сами слои, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ сдСлано Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Wanderer.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ waterDelay ΠΈ waterTile ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ элСмСнты с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ΄Ρ‹. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈΠ· этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, Π° вторая содСрТит Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π½Π° экран изобраТСния.

Π”Π²Π° слоя ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса TiledLayer. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ слоСв:

try {

backgroundLayer = new TiledLayer(16, 16, //Π€ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ слой ΠΈ слой-ΠΏΡ€Π΅Π³Ρ€Π°Π΄Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€

Image.createImage("/Background.png"), 48, 48);

barrierLayer = new TiledLayer(16, 16,

Image.createImage("/Barrier.png"), 48, 48);

}

catch (IOException e) {

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

}

Код, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ слой ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ холст, располоТСн Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ start() класса WCanvas. Π’Π°ΠΊ, Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ слой задаСтся массивом Ρ†Π΅Π»Ρ‹Ρ… чисСл (ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ):

int[] backgroundMap = {

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //Нули Π² ΠΊΠΎΠ΄Π΅ – это пустыС ячСйки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚Ρ‹ слоСм-Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠΌ

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,

0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,

0, 2, 2, 2, 2, 5, 15, 15, 15, 15, 15, 15, 6, 2, 2, 0,

0, 2, 2, 2, 2, 7, 10, 1, 1, 1, 1, 1, 16, 2, 2, 0,

0, 2, 2, 2, 2, 2, 14, 1, 1, 1, 1, 1, 16, 2, 2, 0,

0, 2, 2, 2, 2, 2, 7, 10, 1, 1, 1, 1, 16, 2, 2, 0,

0, 2, 2, 2, 2, 2, 2, 14, 1, 1, 1, 1, 16, 2, 2, 0,

0, 2, 2, 2, 2, 2, 2, 14, 1, 9, 10, 1, 16, 2, 2, 0,

0, 2, 2, 5, 15, 6, 2, 14, 1, 11, 12, 1, 16, 2, 2, 0,

0, 2, 2, 14, 1, 16, 2, 7, 13, 13, 13, 13, 8, 2, 2, 0,

0, 2, 2, 7, 13, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,

0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,

0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

};

Π’Π°ΠΊΠΎΠΉ массив Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Π°ΠΌ Π·Π½Π°ΠΊΠΎΠΌ. ΠŸΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ΄ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠΎΠ³Π΄Π° познакомились с описаниСм Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ слоя. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ слой Π² соотвСтствии с Π΅Π³ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ:

for (int i = 0; i < backgroundMap.length; i++) {

int column = i % 16;

int row = (i – column) / 16;

backgroundLayer.setCell(column, row, backgroundMap[i]);

}

НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΉ элСмСнт этого ΠΊΠΎΠ΄Π° – это число 16, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСт число строк ΠΈ столбцов Π² Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½ΠΎΠΌ слоС. Аналогично выполняСтся инициализация слоя-Π±Π°Ρ€ΡŒΠ΅Ρ€Π°. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΊΠ°Ρ€Ρ‚Ρ‹ этого слоя, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π½ Π² Π²ΠΈΠ΄Π΅ массива Ρ†Π΅Π»Ρ‹Ρ… чисСл:

barrierLayer.createAnimatedTile(1);

int[] barrierMap = {

–1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, //Π―Ρ‡Π΅ΠΉΠΊΠΈ с индСксом -1 Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ изобраТСния Π²ΠΎΠ΄Ρ‹

–1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1,

1, 21, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 22, 1,

1, 18, 0, 5, 5, 5, 5, 8, 0, 0, 8, 0, 0, 0, 20, -1,

1, 18, 0, 0, 0, 0, 0, 0, 0, 16, 8, 0, 0, 0, 20, 1,

–1, 18, 7, 7, 7, 11, 7, 8, 0, 0, 10, 5, 0, 0, 20, -1,

1, 18, 0, 11, 0, 0, 11, 7, 7, 12, 0, 0, 0, 0, 20, -1,

–1, 18, 0, 7, 7, 7, 0, 11, 12, 8, 0, 0, 0, 0, 20, 1,

1, 18, 0, 11, 12, 0, 15, 10, 0, 8, 0, 0, 0, 0, 20, 1,

1, 18, 0, 0, 13, 0, 10, 5, 5, 9, 0, 0, 0, 0, 20, -1,

–1, 18, 7, 10, 5, 9, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1,

–1, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, -1,

1, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1,

1, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1,

–1, 23, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, -1,

–1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1

};

Π­Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ слой Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π°:

for (int i = 0; i < barrierMap.length; i++) {

int column = i % 16;

int row = (i – column) / 16;

barrierLayer.setCell(column, row, barrierMap[i]);

}

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ слои созданы ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ созданию ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° слоСв. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ слоСв Π΅Ρ‰Π΅ ΠΈ управляСт спрайтом гСроя, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΊΠ½ΠΎΠΌ Π²ΠΈΠ΄Π° Π½Π° спрайт ΠΈ Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½Ρ‹Π΅ слои. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ слоСв ΠΈ ΠΎΠΊΠ½ΠΎ Π²ΠΈΠ΄Π°:

layers = new LayerManager();

layers.append(personSprite); //ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ добавлСния слоСв ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ опрСдСляСт ΠΈΡ… Z-порядок

layers.append(barrierLayer);

layers.append(backgroundLayer);

xView = (backgroundLayer.getWidth() – getWidth()) / 2;

yView = (backgroundLayer.getHeight() – getHeight()) / 2;

layers.setViewWindow(xView, yView, getWidth(), getHeight());

personSprite.setPosition(xView + (getWidth() -

personSprite.getWidth()) / 2,

yView + (getHeight() – personSprite.getHeight()) / 2);

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° слоСв append() добавляСт слой. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ слои Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ свСрху Π²Π½ΠΈΠ·. Π˜Π½Π°Ρ‡Π΅ говоря, послСдний слой Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ ΠΏΠΎΠ΄ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сначала добавляСтся спрайт пСрсонаТа, Π° Π·Π°Ρ‚Π΅ΠΌ – слой-Π±Π°Ρ€ΡŒΠ΅Ρ€ ΠΈ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ слой. Π—Π°Ρ‚Π΅ΠΌ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° Π²ΠΈΠ΄Π°. Π•Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ холста, Π° Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… xView ΠΈ yView ΠΈ инициализируСтся ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π° слоСв. Π‘ΠΏΡ€Π°ΠΉΡ‚ гСроя размСщаСтся Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ экрана. Π Π°Π½Π΅Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ элСмСнты Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ слоя – Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅. Для создания Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ:

waterDelay = 0; waterTile = 1;

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ waterDelay – это просто счСтчик, поэтому ΠΎΠ½Π° инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ waterTile содСрТит Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ изобраТСния Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ элСмСнта Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ слоя, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС -1 (рис. 11.5). ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для создания Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π²ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ update(), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° большая Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°. Π’ листингС 11.1 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° update(). Листинг 11.1. ΠœΠ΅Ρ‚ΠΎΠ΄ update() класса WCanvas ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ Π²ΠΈΠ΄Π° Π² соотвСтствии с наТатиями клавиш

private void update() {