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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Adobe Flash. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°Ρ€ΠΊΠ°Π΄, Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΎΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ³Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ActionScriptΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 80

Автор Гэри Π ΠΎΠ·Π΅Π½Ρ†Π²Π΅ΠΉΠ³

function moveFox() {

(1) β†’ // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ пСрСмСщСния лисы.

foxBounds = determineBounds(foxPos);

(2) β†’ // Если ΠΏΠΎΠ΄ лисой пусто, ΠΎΠ½Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠ°Π΄Π°Ρ‚ΡŒ.

if ((foxBounds.bottom > 0) and (!falling)) falling = true;

(3) β†’ // ПадСниС.

if (falling) checkFall();

(4) β†’ // Если Π½Π°ΠΆΠ°Ρ‚Π° лСвая стрСлка, Ρ‚ΠΎ двиТСмся Π²Π»Π΅Π²ΠΎ, Ссли Ρ‚Π°ΠΌ Π½Π΅Ρ‚ прСпятствия.

if (Key.isDown(Key.LEFT)) {

if (foxSpeed < foxBounds.left) {

foxPos.x -= foxSpeed;

}

if (foxPos.x < 0) foxPos.x = 0;

fox._xscale = 25;

moving = true;

// Если Π½Π°ΠΆΠ°Ρ‚Π° правая стрСлка, Ρ‚ΠΎ двиТСмся Π²ΠΏΡ€Π°Π²ΠΎ, Ссли Ρ‚Π°ΠΌ Π½Π΅Ρ‚ прСпятствия.

} else if (Key.isDown(Key.RIGHT)) {

if (foxSpeed < foxBounds.right) {

foxPos.x += foxSpeed;

}

if (foxPos.x > worldEnd) foxPos.x = worldEnd;

fox._xscale = -25;

moving = true;

// Если Π½Π΅ двиТСмся.

} else {

moving = false;

}

(5) β†’  // Если стоим Π½Π° повСрхности ΠΈ Π½Π°ΠΆΠ°Ρ‚ ΠΏΡ€ΠΎΠ±Π΅Π» – ΠΏΡ€Ρ‹Π³Π°Π΅ΠΌ.

if (Key.isDown(Key.SPACE) and (!falling)) {

fallSpeed = jumpPower; // ΠŸΡ€Ρ‹ΠΆΠΎΠΊ = ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π²Π²Π΅Ρ€Ρ…

falling = true;

if (!moving) { // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ ΠΏΡ€Ρ‹ΠΆΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅ΡΠ»ΠΈ лиса Π½Π΅ ΠΈΠ΄Π΅Ρ‚.

fox.gotoAndPlay("jump");

}

}

(6) β†’  // Если ΠΈΠ΄Π΅Ρ‚ ΠΈ Π½Π΅ ΠΏΠ°Π΄Π°Π΅Ρ‚, Ρ‚ΠΎ Π°Π½ΠΈΠΌΠΈΡ€ΡƒΠ΅ΠΌ Ρ…ΠΎΠ΄ΡŒΠ±Ρƒ.

if (moving and !falling) {

fox.nextFrame();

// Если Π½Π΅ ΠΈΠ΄Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΏΠ°Π΄Π°Π΅Ρ‚ – ΠΊΠ°Π΄Ρ€ со стоящСй лисой.

} else if (!moving and !falling) {

fox.gotoAndStop(1);

}

(7) β†’  // ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ лисы ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ.

fox._y = floor – foxPos.y;

// АктивируСм ΠΊΡ€ΠΎΠ»ΠΈΠΊΠ°.

moveBunnies();

// ΠŸΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² соотвСтствии с Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ.

drawObjects();

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Π½Π΅ съСдСн Π»ΠΈ ΠΎΡ€Π΅Ρ….

getAcorns();

}

Ѐункция determineBounds выглядит слоТно, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½Π° двольно простая. Π’Π½Π°Ρ‡Π°Π»Π΅ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΌ, Ρ‡Ρ‚ΠΎ пространство слСва, справа ΠΈ свСрху Π²ΠΎΠΊΡ€ΡƒΠ³ лисы пустоС Π½Π° расстоянии 1000 пиксСлов. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ пустого пространства ΠΏΠΎΠ΄ лисой. Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ лисы ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ Π² свойствС pos.y.

Π”Π°Π»Π΅Π΅ слСдуСт Ρ†ΠΈΠΊΠ» ΠΏΠΎ всСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Ρ‚ΠΈΠΏΠ° box. ВычисляСтся расстояниС ΠΎΡ‚ лисы Π΄ΠΎ Π±Π»ΠΎΠΊΠ° ΠΈ записываСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ dx ΠΈ dy.

Если Π±Π»ΠΎΠΊ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ лиса (Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами – Ссли ΠΎΠ½ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ расстоянии ΠΎΡ‚ Π·Π΅ΠΌΠ»ΠΈ), Ρ‚ΠΎ функция провСряСт, находится Π»ΠΈ ΠΎΠ½ справа ΠΈΠ»ΠΈ слСва. Π”Π°Π»Π΅Π΅ провСряСтся, Ссли расстояниС Π΄ΠΎ Π±Π»ΠΎΠΊΠ° справа (слСва) мСньшС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния bounds.right (.left) , Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ bounds. right (. left) пСрСопрСдСляСтся. Аналогично ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ всС Π±Π»ΠΎΠΊΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ bounds содСрТит Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ для лисы Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. НапримСр, Ссли bounds.left Ρ€Π°Π²Π½ΠΎ 20, Ρ‚ΠΎ блиТайший ΠΊ лисС Π±Π»ΠΎΠΊ справа находится Π½Π° расстоянии 20 пиксСлов.

Ѐункция determineBounds написана Π² достаточно ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ для лисы, Ρ‚Π°ΠΊ ΠΈ для ΠΊΡ€ΠΎΠ»ΠΈΠΊΠΎΠ². Π’ качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° pos Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ foxPos, Ρ‚Π°ΠΊ ΠΈ элСмСнт массива objects, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΡ€ΠΎΠ»ΠΈΠΊΠ°.

function determineBounds(pos) {

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ пСрСмСщСния.

var bounds = {left:1000,right:1000,top:1000,bottom:pos.y};

// Π¦ΠΈΠΊΠ» ΠΏΠΎ всСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ.

for(var i=0;i<objects.length;i++) {

// РассматриваСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π»ΠΎΠΊΠΈ.

if (objects[i].type == "box") {

var dx = objects[i].x – pos.x;

var dy = objects[i].y – pos.y;

// Если Π±Π»ΠΎΠΊ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

if ((dy >= 0) and (dy <= 50)) {

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, являСтся Π»ΠΈ блиТайшим Π»Π΅Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ.

if ((dx+50 <= 0) and (Math.abs(dx+50) < bounds.left)) {

bounds.left = Math.abs(dx+50);

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, являСтся Π»ΠΈ блиТайшим ΠΏΡ€Π°Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ.

} else if ((dx >= 0) and (dx < bounds.right)) {

bounds.right = dx-50;

}

}

// Π‘Π»ΠΎΠΊ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

if ((dx >= -50) and (dx <= 50)) {

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, являСтся Π»ΠΈ блиТайшим Π½ΠΈΠΆΠ½ΠΈΠΉ Π±Π»ΠΎΠΊ.

if ((dy+50 <= 0) and (Math.abs(dy+50) <=

bounds.bottom)) {

bounds.bottom = Math.abs(dy+50);

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, являСтся Π»ΠΈ блиТайшим Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π±Π»ΠΎΠΊ.

} else if ((dy-50 >= 0) and (dy-50 < bounds.top)) {

bounds.top = dy-50;

}

}

}

}

return(bounds);

}

Если лиса находится Π² Π²ΠΎΠ·Π΄ΡƒΡ…Π΅, Ρ‚ΠΎ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€Ρ‹Π³Π°Π΅Ρ‚ Π»ΠΈ ΠΎΠ½Π° Π²Π²Π΅Ρ€Ρ… ΠΈΠ»ΠΈ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π²Π½ΠΈΠ·, это состояниС рассматриваСтся ΠΊΠ°ΠΊ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅. Ѐункция CheckFall слСдит Π·Π° Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ лисы. Когда ΠΈΠ³Ρ€ΠΎΠΊ ΠΏΡ€Ρ‹Π³Π°Π΅Ρ‚, пСрСмСнная fallSpeed ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ jumpPower, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π°Π²Π½ΠΎ 60. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, лиса пытаСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π½Π° 60 пиксСлов ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ°Π΄Ρ€Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ происходит процСсс Β«ΠΏΡ€Ρ‹ΠΆΠΎΠΊ/ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅Β», пСрСмСнная fallSpeed ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 10, Ρ‡Ρ‚ΠΎ создаСт эффСкт силы тяТСсти. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ fallSpeed обнулится Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΏΡ€Ρ‹ΠΆΠΊΠ° ΠΈ Π½Π°Ρ‡Π½Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ, Π° лиса устрСмится Π²Π½ΠΈΠ·.

Если значСния скорости падСния Π΅Ρ‰Π΅ нСдостаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ лиса достигла Π·Π΅ΠΌΠ»ΠΈ, Ρ‚ΠΎ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ продолТаСтся. Но ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΅ΠΌΠ»ΠΈ достигнут ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½, ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ прСкращаСтся, ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ позиция лисы устанавливаСтся Ρ€Π°Π²Π½ΠΎΠΉ полоТСнию Π·Π΅ΠΌΠ»ΠΈ.

Ѐункция checkFall Ρ‚Π°ΠΊΠΆΠ΅ обращаСтся ΠΊ свойству foxBound.top, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅Ρ‚ Π»ΠΈ Π±Π»ΠΎΠΊΠ° Π½Π°Π΄ лисой. Если лиса упираСтся Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ двиТСния, Ρ‚ΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡ, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π²Π²Π΅Ρ€Ρ…, ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π΅Ρ‚, пСрСмСнная fallSpeed обнуляСтся. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Β«ΠΏΡ€Ρ‹ΠΆΠΎΠΊ/ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅Β» продолТаСтся, Π½ΠΎ являСтся Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ.

function checkFall() {

// Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ силу тяТСсти.

fallSpeed -= 10;

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Π΅ΡΡ‚ΡŒ Π»ΠΈ мСсто для падСния.

if (fallSpeed > -foxBounds.bottom) {

foxPos.y += fallSpeed;

// ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅ΠΌ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΈ устанавливаСм лису Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΅ΠΌΠ»ΠΈ.

} else {

foxPos.y -= foxBounds.bottom;

fallSpeed = 0;

falling = false;

fox.gotoAndStop(1); // stand

}

// Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Π½Π΅ упираСтся Π»ΠΈ лиса Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π±Π»ΠΎΠΊ.

if (foxPos.y > foxBounds.top) {

foxPos.y = foxBounds.top;

fallSpeed = 0;

}

}

Ѐункция drawObjects создаСт эффСкт двиТСния лисы. Она пСрСрисовываСт всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² соотвСтствии с ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ лисы.

function drawObjects() {

// Π¦ΠΈΠΊΠ» ΠΏΠΎ всСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ.

for(var i=0;i<objects.length;i++) {

// УстанавливаСм Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² соотвСтствиС с ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ лисы.

_root["object "+i]._x = x = 275 + objects[i].x – foxPos.x;

// УстанавливаСм Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² соотвСтствиС ΡΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ floor.

_root["object "+i]._y = floor – objects[i].y;

}

}

Ѐункция getAcorns просматриваСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² поисках ΠΎΡ€Π΅Ρ…ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ€Π΅Ρ… провСряСтся, достаточно Π»ΠΈ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΎΠ½ находится ΠΊ лисС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° Π΅Π³ΠΎ Π²Π·ΡΡ‚ΡŒ. Если ΠΎΡ€Π΅Ρ… съСдСн, Π΅Π³ΠΎ свойство type устанавливаСтся Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ used. Π­Ρ‚ΠΎΡ‚ ΠΎΡ€Π΅Ρ… Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ игнорируСтся всСми функциями, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° used.

function getAcorns() {

// ΠŸΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅ΠΌ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

for(var i=objects.length-1;i>=0;iβ€”) {

if (objects[i].type == "acorn") {

// Если Π±Π»ΠΈΠΆΠ΅ 30 пиксСлов – Ρ…Π²Π°Ρ‚Π°Π΅ΠΌ ΠΎΡ€Π΅Ρ….

if (distance(_root["object "+i],fox) < 30) {

_root["object "+i].play();

objects[i].type = "used";

score += 100;

}

}

}

}

Ѐункция getAcorns Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ distanse для опрСдСлСния расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ лисой ΠΈ ΠΎΡ€Π΅Ρ…ΠΎΠΌ. Π­Ρ‚Π° ΠΆΠ΅ функция Π±ΡƒΠ΄Π΅Ρ‚ Π² дальнСйшСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ moveBunnies.

// Ѐункция для опрСдСлСния расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠΏΠ°ΠΌΠΈ.

function distance(mc1,mc2) {

d = Math.sqrt(Math.pow(mc1._x-mc2._x,2)+Math.pow(mc1._y-mc2._y,2));

return d;

}

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

function moveBunnies() {

// ΠŸΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅ΠΌ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² поисках ΠΊΡ€ΠΎΠ»ΠΈΠΊΠΎΠ².

for(var i=objects.length-1;i>=0;iβ€”) {

if (objects[i].type == "bunny") {

// ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… ΠΊΡ€ΠΎΠ»ΠΈΠΊΠΎΠ².

if (Math.abs(objects[i].x-foxPos.x) < 275) {

// ДвиТСмся Π² сторону лисы.

if (foxPos.x < objects[i].x) {

var dx = -bunnySpeed;

} else if (foxPos.x > objects[i].x) {

var dx = bunnySpeed;

}

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.

bunnyBounds = determineBounds(objects[i]);

// ДвиТСмся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… этих Π³Ρ€Π°Π½ΠΈΡ†.

if ((dx < 0) and (bunnyBounds.left > Math.abs(dx))) {

objects[i].x += dx;

} else if ((dx > 0) and (bunnyBounds.right > Math.abs(dx))) {

objects[i].x += dx;

}

// НС подобрался Π»ΠΈ ΠΊΡ€ΠΎΠ»ΠΈΠΊ достаточно Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ лисС.

if (distance(_root["object "+i],fox) < 30) {

_root.onEnterFrame = undefined;

trace("got ya");

}

}

}

}

}

К свСдСнию

Клип с лисой содСрТит Ρ‚Ρ€ΠΈ части: Β«standΒ», Β«runΒ» ΠΈ Β«jumpΒ». Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΊΠ°Π΄Ρ€Π΅ содСрТится ΠΊΠΎΠΌΠ°Π½Π΄Π° stop(). Π’ послСднСм ΠΊΠ°Π΄Ρ€Π΅ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Β«runΒ» содСрТится ΠΊΠΎΠΌΠ°Π½Π΄Π° gotoAndPlay(Β«runΒ»). Благодаря этому Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ зацикливаСтся.

Клип "acorn" Ρ‚Π°ΠΊΠΆΠ΅ содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ stop() Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΊΠ°Π΄Ρ€Π΅.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ – это установка Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊΠ»ΠΈΠΏΠΎΠ². Он располоТСн Π²Π½ΠΈΠ·Ρƒ ΠΈ ΠΎΡ‚Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π°Π½ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ. На рис 16.9 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ ΠΊΠ»ΠΈΠΏ "box" ΠΈ Π΅Π³ΠΎ Ρ†Π΅Π½Ρ‚Ρ€.

Рисунок 16.9. Π’ΠΎ всСх ΠΊΠ»ΠΈΠΏΠ°Ρ… Ρ†Π΅Π½Ρ‚Ρ€ находится Π²Π½ΠΈΠ·Ρƒ Ρ‚ΠΎΡ‡Π½ΠΎ посСрСдинС

Π”Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности

Π­Ρ‚Π° ΠΈΠ³Ρ€Π° дСмонстрируСт лишь ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ возмоТности ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ скроллСра. Она Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ проста, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. БущСствуСт нСсколько возмоТностСй ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ³Ρ€Ρ‹.

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

Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΈΠ³Ρ€Π° оканчиваСтся, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ собрал всС ΠΎΡ€Π΅Ρ…ΠΈ. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ пространство ΠΈΠ³Ρ€Ρ‹ большС.

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