Stundas uzdevums: Izveidot automātisku spēles ciklu, izmantojot laika kontroles funkcijas, lai spēles elementi (šķēršļi, laika atskaite) darbotos patstāvīgi bez lietotāja iejaukšanās.
2.6.1. Pieraksta un izpilda algoritmus; 3.4.3. Skaidro tehnoloģisko procesu norisi (reāllaika sistēmas).70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
Gandrīz visas datorspēles pamatā ir "Game Loop" – kods, kas atkārtojas desmitiem reižu sekundē (FPS - frames per second). Tas dara trīs lietas: nolasa spēlētāja ievadi, atjaunina pozīcijas un pārzīmē ekrānu.
// Spēles cikls ar setInterval (60 FPS)
let punkti = 0;
const cikls = setInterval(() => {
punkti += 1;
document.getElementById("score").textContent = punkti;
}, 1000 / 60);
// Pārtraukšana
clearInterval(cikls);
Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 4.4 Laika kontrole (Timers) un spēles cikls; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
// Spēles cikls ar setInterval (60 FPS)
let punkti = 0;
const cikls = setInterval(() => {
punkti += 1;
document.getElementById("score").textContent = punkti;
}, 1000 / 60);
// Pārtraukšana
clearInterval(cikls);
script.js failā vai lapas esošajā skripta daļā.Pievieno šīs stundas paņēmienu kā nelielu, lietotājam redzamu projekta daļu.
script.js un pievieno: let ciklsId = null; let speleAktiva = false; let ienX = 0;saktSpeli(), kas iestata speleAktiva = true un sāk setInterval(spelesCikls, 16).spelesCikls(), kas palielina ienX += 3 un atjauno ienaidnieka pozīciju; ja ienX > 400, atiestatiet uz 0.beigtSpeli(), kas izsauc clearInterval(ciklsId) un rāda "Spēle beigusies!".index.html, pievieno pogas "Sākt" un "Apturēt" un pievieno ienaidnieka elementu ar position: absolute.git commit -m "Add game loop with setInterval".Pārbaudi, vai algoritms darbojas paredzami vairākās situācijās.
setInterval izsauc clearInterval(ciklsId).ienX += 3 uz += 10 - pārbaudi, ka kustība kļūst ātrāka.clearInterval jāizsauc pirms jaunas setInterval sākšanas.Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu programmētu uzlabojumu.
let sekundes = 30; un elementu <p id="taimeris">30</p>.setInterval, kas samazina sekundes par 1 ik sekundi.<p id="taimeris"> ar aktuālo vērtību katru sekundi.sekundes <= 0, izsauc beigtSpeli().git commit -m "Add countdown timer to game".let spelesTaimeris = setInterval(...) funkcijas iekšpusē, tu nevarēsi to apturēt ar clearInterval() citā funkcijā (Scope kļūda). Taimera mainīgo vienmēr definē faila sākumā!setInterval, tiek izsaukta vairākas reizes (piemēram, katru reizi nospiežot "Sākt spēli"), tiks palaisti vairāki paralēli taimeri, un laiks vai kustība kļūs neprātīgi ātra. Vienmēr pārbaudi, vai iepriekšējais intervāls ir apturēts pirms jauna sākšanas....style.top = Y + "px").let atlikusaisLaiks = 10;
// Definējam mainīgo intervālam, lai vēlāk to varētu apturēt
let taimerisID;
function atjauninotLaiku() {
atlikusaisLaiks--; // Samazinām par 1
document.getElementById("laiks").innerText = atlikusaisLaiks;
// Pārbaudām, vai laiks beidzies
if (atlikusaisLaiks <= 0) {
clearInterval(taimerisID); // Apturam taimeri
console.log("Spēle beigusies! Laiks iztecēja.");
// Šeit mēs varētu apturēt arī ienaidnieku kustību
// clearInterval(ienaidniekaKustiba);
}
}
// Palaižam taimeri ik pēc 1000 milisekundēm (1 sekunde)
taimerisID = setInterval(atjauninotLaiku, 1000);