Tavs šīs stundas izaicinājums: Izstrādāt matemātisku algoritmu, kas reāllaikā pārbauda, vai divi spēles elementi (piemēram, spēlētājs un šķērslis) ekrānā pārklājas, un atbilstoši reaģēt.
2.6.1. Izstrādā komplicētas darbības un algoritmus; 5.2.1. Definē problēmas būtību un risina kompleksus izaicinājumus.Dators neskatās uz tavu uzzīmēto varoni kā uz cilvēku. Tas redz tikai kastes (taisnstūrus). Divas kastes saduras TIKAI TAD, ja vienlaicīgi izpildās četri nosacījumi:
getBoundingClientRect(), kas uzreiz iedod elementa X un Y koordinātas, kā arī tā platumu un augstumu, padarot šo matemātiku daudz vieglāku!
Iemācīties iegūt precīzas elementu koordinātas un izmērus no HTML lapas.
function parbauditSadursmi() { ... }.let varonisKaste = varonisObj.getBoundingClientRect();let ienaidnieksKaste = ienaidnieksObj.getBoundingClientRect();console.log(varonisKaste.left, varonisKaste.top);.Uzrakstīt milzu "If" nosacījumu, kas pārbauda visu četru malu pārklāšanos.
console.log un pievieno sekojošu nosacījumu: if (varonisKaste.left < ienaidnieksKaste.right && varonisKaste.right > ienaidnieksKaste.left && varonisKaste.top < ienaidnieksKaste.bottom && varonisKaste.bottom > ienaidnieksKaste.top) { ... }alert("Sadursme!");.parbauditSadursmi() konsolē. Vai "alert" parādās?Ievietot sadursmes pārbaudi spēles ciklā, lai tā notiktu automātiski, bez apstājas.
setInterval, kurā kustas ienaidnieks vai krīt laiks).parbauditSadursmi(); funkcijas izsaukumu tieši šī cikla (intervāla) iekšpusē. Tagad pārlūks pārbaudīs sadursmi 50 reizes sekundē!alert pret kaut ko elegantāku: samazini spēlētāja dzīvības vai izsauc funkciju clearInterval(), lai apstādinātu spēli ("Game Over"). Veic Commit un Push uz GitHub.alert, tas var izlēkt 50 reizes sekundē un "uzkārt" pārlūku. Vienmēr labāk nomainīt HTML tekstu vai apturēt ciklu ar clearInterval!bottom (apakša) vērtība vienmēr ir lielāka (vairāk pikseļu) nekā top (augša).parbauditSadursmi() faila sākumā tikai vienu reizi, dators to pārbaudīs tikai lapas ielādes brīdī un pēc tam vairs nekad. Tai obligāti jābūt ciklā vai uz taustiņa nospiešanas notikuma!function parbauditSadursmi() {
// 1. Iegūstam abu elementu kastes (izveidojot 'taisnstūrus' atmiņā)
let speletajs = document.getElementById("speletajs").getBoundingClientRect();
let skerslis = document.getElementById("ienaidnieks").getBoundingClientRect();
// 2. AABB Sadursmes matemātika (vai tie PĀRKLĀJAS?)
if (
speletajs.left < skerslis.right &&
speletajs.right > skerslis.left &&
speletajs.top < skerslis.bottom &&
speletajs.bottom > skerslis.top
) {
// SADURSME IR NOTIKUSI!
console.log("BOOM! Spēle beigusies.");
document.getElementById("status").innerText = "GAME OVER";
// Šeit parasti aptur spēles dzinēju
// clearInterval(spelesCiklsID);
}
}
// 3. Spēles dzinējs, kas kustina lietas un vienmēr pārbauda sadursmes
let spelesCiklsID = setInterval(function() {
// Kustinām ienaidnieku...
// Atjauninām laiku...
// Un katru kadru pārbaudām, vai neesam saskrējušies!
parbauditSadursmi();
}, 20); // 20 milisekundes = 50 FPS