If you're seeing this message, it means we're having trouble loading external resources on our website.

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Сблъсъци на съчки

Вече имаме подскачащ бобър, имаме и показващи се пръчки – сега просто трябва да обединим двете заедно. Ние искаме да знаем, кога нашя бобър успява да стигне пръчката, така че да може успешно да я вземе. Това означава, че трябва да направим проста проверка за сблъсък на двата обекта. Има много места, където можем да програмираме тази функционалност, тъй като тя се занимава с два обекта – като глобална функция, като метод на обекта за пръчката Stick, като метод на обекта за бобъра Beaver. Нека да я залепим към бобъра засега.
Beaver.prototype.checkForStickGrab = function(stick) {
  // ако бобърът е върху пръчка, направи нещо
};
В тази функция първо трябва да напишем условие, което ще бъде вярно (true) – ако бобър и пръчка се сблъскат, и (false) лъжа – в обратния случай. Можем да го направим сложно или строго в зависимост от местоположението на ръката на Beaver например, но нека не си усложняваме живота засега. Те трябва да се "сблъскат" ако (if):
  • x позицията на централната част на пръчката е между двете страни за бобъра.
  • y позиция на централната част на пръчката е между горната и долната част на бобъра.
Пръчката е начертана с командата rect, така че обикновено това означава, че x и y свойствата представляват координатите на горния ляв ъгъл. Въпреки това, за да си опростим изчисленията, можем да минем в режим, в който rect се чертае от центъра:
rectMode(CENTER);
rect(this.x, this.y, 5, 40);
Изображението за бобъра също се чертае по подразбиране в горния ляв ъгъл, но ние ще запазим този режим, тъй като той работи добре с нашите изчисления. За да проверим състоянието на първата позиция x, можем да направим проверка като тази, в която проверяваме дали пръчката x е по-голяма от или равна на лява страна (x) на бобъра и по-малка или равна на дясната страна (x + 40) на бобъра.
stick.x >= this.x && stick.x <= (this.x + 40)
За да проверим позицията на y, можем да направим подобна проверка, в която можем да проверим дали y пръчката е по-голяма от или равна на бобъра отгоре (y) и по-малка или равна на бобъра отдолу (y + 40):
stick.y >= this.y && stick.y <= (this.y + 40)
Сега, какво трябва действително да направим, когато открием сблъсък между бобъра и пръчката? Искаме ефективно да премахнем пръчката от екрана и да предотвратим по-нататъшен сблъсък. Един лесен начин да направим това е просто да избутаме пръчката извън екрана, като ѝ променим y координатата:
stick.y = -400;
В същото време искаме да помним колко пръчки е "хванал" бобърът, така че увеличаваме свойството на пръчките с едно:
this.sticks++;
И накрая, трябва да извикаме този метод в подходящо време – например след като нарисувахме всяка пръчка.
for (var i = 0; i < sticks.length; i++) {
  sticks[i].draw();
  beaver.checkForStickGrab(sticks[i]);
  sticks[i].x -= 1;
}
Ето пълният резултат – пробвай; когато скочиш върху някоя пръчка, тя изчезва!

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.