You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/cs/6-space-game/4-collision-detection/README.md

767 lines
28 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Vytvoření vesmírné hry část 4: Přidání laseru a detekce kolizí
```mermaid
journey
title Vaše cesta detekcí kolizí
section Základy fyziky
Porozumět obdélníkům: 3: Student
Naučit se matematiku průniků: 4: Student
Pochopit souřadnicové systémy: 4: Student
section Herní mechaniky
Implementovat střelbu laserem: 4: Student
Přidat životní cyklus objektu: 5: Student
Vytvořit pravidla kolizí: 5: Student
section Integrace systému
Vytvořit detekci kolizí: 5: Student
Optimalizovat výkon: 5: Student
Testovat interakční systémy: 5: Student
```
## Přednáškový kvíz
[Přednáškový kvíz](https://ff-quizzes.netlify.app/web/quiz/35)
Zamyslete se nad momentem ve Star Wars, kdy protonové torpéda Luka zasáhla výfukovou štěrbinu Hvězdy smrti. Právě tato přesná detekce kolize změnila osud galaxie! V hrách funguje detekce kolizí stejně určuje, kdy objekty interagují a co se stane dál.
V této lekci přidáte do své vesmírné hry laserové zbraně a implementujete detekci kolizí. Stejně jako plánovači misí NASA počítají trajektorie kosmických lodí, abyste se vyhnuli trosek, naučíte se detekovat, kdy se herní objekty protínají. Tento proces rozdělíme na zvládnutelné kroky, které na sebe navazují.
Na konci budete mít funkční bojový systém, kde lasery ničící nepřátele a kolize spouštějí herní události. Stejné principy detekce kolizí se používají od fyzikálních simulací po interaktivní webová rozhraní.
```mermaid
mindmap
root((Detekce kolizí))
Physics Concepts
Rectangle Boundaries
Intersection Testing
Coordinate Systems
Separation Logic
Game Objects
Laser Projectiles
Enemy Ships
Hero Character
Collision Zones
Lifecycle Management
Object Creation
Movement Updates
Destruction Marking
Memory Cleanup
Event Systems
Keyboard Input
Collision Events
Game State Changes
Audio/Visual Effects
Performance
Efficient Algorithms
Frame Rate Optimization
Memory Management
Spatial Partitioning
```
✅ Proveďte malý průzkum o vůbec první napsané počítačové hře. Jaká byla její funkčnost?
## Detekce kolizí
Detekce kolizí funguje jako proximity senzory na lunárním modulu Apollo neustále kontroluje vzdálenosti a spouští upozornění, když se objekty přiblíží příliš blízko. V hrách tento systém určuje, kdy objekty interagují a co by se mělo stát dál.
Použitý přístup považuje každý herní objekt za obdélník, podobně jako systémy řízení letového provozu používají zjednodušené geometrické tvary k sledování letadel. Tato obdélníková metoda může vypadat základně, je však výpočetně efektivní a dobře funguje ve většině herních situací.
### Reprezentace obdélníku
Každý herní objekt potřebuje souřadnicové hranice, podobně jako rover Mars Pathfinder mapoval svou polohu na povrchu Marsu. Zde jsou definice těchto hranic:
```mermaid
flowchart TD
A["🎯 Herní objekt"] --> B["📍 Pozice (x, y)"]
A --> C["📏 Rozměry (šířka, výška)"]
B --> D["Horní: y"]
B --> E["Levý: x"]
C --> F["Spodní: y + výška"]
C --> G["Pravý: x + šířka"]
D --> H["🔲 Obrys obdélníku"]
E --> H
F --> H
G --> H
H --> I["Připraveno pro detekci kolize"]
style A fill:#e3f2fd
style H fill:#e8f5e8
style I fill:#fff3e0
```
```javascript
rectFromGameObject() {
return {
top: this.y,
left: this.x,
bottom: this.y + this.height,
right: this.x + this.width
}
}
```
**Podrobněji:**
- **Horní okraj**: To je jen místo, kde váš objekt začíná vertikálně (jeho pozice y)
- **Levý okraj**: Kde začíná horizontálně (jeho pozice x)
- **Spodní okraj**: Přičtěte výšku k pozici y nyní víte, kde končí!
- **Pravý okraj**: Přičtěte šířku k pozici x a máte kompletní hranici
### Algoritmus průniku
Detekce průniku obdélníků využívá logiku podobnou té, kterou Hubbleův vesmírný teleskop používá k určení, zda se nebeské objekty překrývají ve svém zorném poli. Algoritmus hledá oddělení:
```mermaid
flowchart LR
A["Obdélník 1"] --> B{"Testy oddělení"}
C["Obdélník 2"] --> B
B --> D["Levý R2 > pravý R1?"]
B --> E["Pravý R2 < levý R1?"]
B --> F["Horní R2 > spodní R1?"]
B --> G["Spodní R2 < horní R1?"]
D --> H{"Některý pravda?"}
E --> H
F --> H
G --> H
H -->|Ano| I["❌ Žádná kolize"]
H -->|Ne| J["✅ Kolize zjištěna"]
style B fill:#e3f2fd
style I fill:#ffebee
style J fill:#e8f5e8
```
```javascript
function intersectRect(r1, r2) {
return !(r2.left > r1.right ||
r2.right < r1.left ||
r2.top > r1.bottom ||
r2.bottom < r1.top);
}
```
**Test separace funguje jako radary:**
- Je obdélník 2 zcela napravo od obdélníku 1?
- Je obdélník 2 zcela nalevo od obdélníku 1?
- Je obdélník 2 zcela pod obdélníkem 1?
- Je obdélník 2 zcela nad obdélníkem 1?
Pokud žádná z těchto podmínek není pravdivá, obdélníky se musí překrývat. Tento přístup odpovídá tomu, jak radaráři určují, zda jsou dvě letadla ve bezpečné vzdálenosti.
## Správa životního cyklu objektů
Když laser zasáhne nepřítele, oba objekty musí být ze hry odstraněny. Mazání objektů během smyčky však může způsobit zhroucení lekce, kterou si rané počítačové systémy jako Apollo Guidance Computer tvrdě odpykaly. Místo toho používáme přístup "označit k odstranění", který bezpečně odstraňuje objekty mezi snímky.
```mermaid
stateDiagram-v2
[*] --> Active: Objekt vytvořen
Active --> Collided: Detekována kolize
Collided --> MarkedDead: Nastavit dead = true
MarkedDead --> Filtered: Další snímek
Filtered --> [*]: Objekt odstraněn
Active --> OutOfBounds: Opustí obrazovku
OutOfBounds --> MarkedDead
note right of MarkedDead
Bezpečné pokračovat
aktuální snímek
end note
note right of Filtered
Objekty odstraněny
mezi snímky
end note
```
Takto označujeme něco k odstranění:
```javascript
// Označit objekt k odstranění
enemy.dead = true;
```
**Proč tento přístup funguje:**
- Označíme objekt jako „mrtvý“, ale okamžitě jej nesmažeme
- To dovolí bezpečně dokončit aktuální snímek hry
- Žádné pády kvůli použití již odstraněné věci!
Poté před příštím vykreslením odfiltrujeme označené objekty:
```javascript
gameObjects = gameObjects.filter(go => !go.dead);
```
**Co filtr dělá:**
- Vytváří nový seznam pouze s „živými“ objekty
- Odstraňuje všechny označené jako mrtvé
- Zajišťuje plynulý chod hry
- Zabraňuje zahlcení paměti hromaděním zničených objektů
## Implementace laserových mechanik
Laserové střely ve hrách fungují na stejném principu jako fotonová torpéda ve Star Treku jsou to samostatné objekty, které letí po přímce, dokud něčeho nedosáhnou. Každé stisknutí mezerníku vytváří nový laserový objekt pohybující se po obrazovce.
Aby to fungovalo, musíme koordinovat několik částí:
**Klíčové komponenty implementace:**
- **Vytvořit** laserové objekty vycházející z pozice hrdiny
- **Zpracovat** vstup z klávesnice pro spuštění vytváření laseru
- **Řídit** pohyb a životní cyklus laseru
- **Implementovat** vizuální podobu laserových střel
## Implementace kontroly rychlosti střelby
Neomezená rychlost střelby by zahltila herní engine a hru učinila příliš jednoduchou. Skutečné zbraňové systémy čelí podobným omezením i phasery USS Enterprise potřebovaly čas na dobití mezi výstřely.
Implementujeme systém ochlazování (cooldown), který zabrání rychlému střílení, a přitom zachová citlivost ovládání:
```mermaid
sequenceDiagram
participant Player
participant Weapon
participant Cooldown
participant Game
Player->>Weapon: Stiskni mezerník
Weapon->>Cooldown: Zkontroluj, zda je připraveno
alt Zbraň je připravená
Cooldown->>Weapon: cool = pravda
Weapon->>Game: Vytvořit laser
Weapon->>Cooldown: Spustit nové ochlazení
Cooldown->>Cooldown: cool = nepravda
Note over Cooldown: Počkej 500 ms
Cooldown->>Cooldown: cool = pravda
else Zbraň se chladí
Cooldown->>Weapon: cool = nepravda
Weapon->>Player: Žádná akce
end
```
```javascript
class Cooldown {
constructor(time) {
this.cool = false;
setTimeout(() => {
this.cool = true;
}, time);
}
}
class Weapon {
constructor() {
this.cooldown = null;
}
fire() {
if (!this.cooldown || this.cooldown.cool) {
// Vytvořit laserový projektil
this.cooldown = new Cooldown(500);
} else {
// Zbraň se stále ochlazuje
}
}
}
```
**Jak cooldown funguje:**
- Při vytvoření je zbraň „horká“ (ještě nemůže střílet)
- Po vypršení času se stává „studenou“ (připravenou střílet)
- Před výstřelem kontrolujeme: „Je zbraň studená?“
- To zabraňuje spamování, ale udržuje ovládání citlivé
✅ Připomeňte si lekci 1 ze série vesmírných her o cooldownu.
## Stavba systému detekce kolizí
Rozšíříte svůj stávající kód vesmírné hry o systém detekce kolizí. Podobně jako automatizovaný systém vyhýbání kolizím na Mezinárodní vesmírné stanici bude vaše hra kontinuálně sledovat pozice objektů a reagovat na průniky.
Na základě kódu z minulé lekce přidáte detekci kolizí s konkrétními pravidly, která řídí interakce objektů.
> 💡 **Tip pro profíky**: Laserový sprite je již součástí vaší složky assets a v kódu je připraven k použití.
### Pravidla kolizí k implementaci
**Herní mechaniky k přidání:**
1. **Laser zasáhne nepřítele**: Nepřítel je zničen při zásahu laserem
2. **Laser zasáhne hranici obrazovky**: Laser je odstraněn při dosažení horního okraje obrazovky
3. **Kolize nepřítele a hrdiny**: Oba objekty jsou zničeny při průniku
4. **Nepřítel dosáhne spodku**: Stav „konec hry“ při dosažení spodní části obrazovky nepřáteli
### 🔄 **Pedagogická kontrola**
**Základy detekce kolizí**: Před implementací zkontrolujte, že rozumíte:
- ✅ Jak hranice obdélníků definují oblasti kolizí
- ✅ Proč je test separace efektivnější než výpočet průniku
- ✅ Význam správy životního cyklu objektů v herní smyčce
- ✅ Jak událostmi řízené systémy koordinují reakce na kolize
**Rychlý autotest**: Co by se stalo, kdybyste objekty mazali okamžitě místo označení?
*Odpověď: Mazání uprostřed smyčky by mohlo způsobit pády nebo přeskočení některých objektů při iteraci*
**Fyzikální pochopení**: Nyní rozumíte:
- **Souřadnicové systémy**: Jak pozice a rozměry určují hranice
- **Logika průniku**: Matematické principy detekce kolizí
- **Optimalizace výkonu**: Proč jsou efektivní algoritmy důležité v reálném čase
- **Správa paměti**: Bezpečné vzory životního cyklu objektů pro stabilitu
## Nastavení vývojového prostředí
Dobrá zpráva většinu základů jsme už pro vás připravili! Všechny herní zdroje a základní struktura čekají ve složce `your-work`, připravené pro přidání skvělých funkcí kolizí.
### Struktura projektu
```bash
-| assets
-| enemyShip.png
-| player.png
-| laserRed.png
-| index.html
-| app.js
-| package.json
```
**Co obsahuje struktura souborů:**
- **Obsahuje** všechny obrázky sprite používané pro herní objekty
- **Zahrnuje** hlavní HTML dokument a JavaScript aplikaci
- **Poskytuje** konfiguraci balíčku pro lokální vývojový server
### Spuštění vývojového serveru
Přejděte do složky projektu a spusťte lokální server:
```bash
cd your-work
npm start
```
**Tento příkaz:**
- **Změní** adresář na váš pracovní projekt
- **Spustí** lokální HTTP server na adrese `http://localhost:5000`
- **Poskytne** herní soubory k testování a vývoji
- **Umožní** živý vývoj s automatickým přenačtením stránky
Otevřete prohlížeč a přejděte na `http://localhost:5000`, kde uvidíte aktuální stav hry s vykresleným hrdinou a nepřáteli.
### Krok za krokem implementace
Podobně systematicky jako NASA programovala kosmickou loď Voyager, implementujeme detekci kolizí postupně, po jednotlivých částech.
```mermaid
flowchart TD
A["1. Obvod obdélníku"] --> B["2. Detekce průniku"]
B --> C["3. Laserový systém"]
C --> D["4. Zpracování událostí"]
D --> E["5. Pravidla kolizí"]
E --> F["6. Systém cooldownu"]
G["Hranice objektů"] --> A
H["Fyzikální algoritmus"] --> B
I["Vytváření projektilů"] --> C
J["Vstup z klávesnice"] --> D
K["Herní logika"] --> E
L["Omezení rychlosti"] --> F
F --> M["🎮 Kompletní hra"]
style A fill:#e3f2fd
style B fill:#e8f5e8
style C fill:#fff3e0
style D fill:#f3e5f5
style E fill:#e0f2f1
style F fill:#fce4ec
style M fill:#e1f5fe
```
#### 1. Přidejte hranice obdélníkových kolizí
Nejprve naučíme hry objekty, jak popsat své hranice. Přidejte tuto metodu do třídy `GameObject`:
```javascript
rectFromGameObject() {
return {
top: this.y,
left: this.x,
bottom: this.y + this.height,
right: this.x + this.width,
};
}
```
**Tato metoda:**
- **Vytvoří** obdélníkový objekt s přesnými hranicemi
- **Spočítá** spodní a pravý okraj podle pozice + rozměrů
- **Vrátí** objekt připravený na algoritmy detekce kolizí
- **Poskytne** jednotné rozhraní pro všechny herní objekty
#### 2. Implementujte detekci průniku
Teď vytvoříme detektiva kolizí funkci, která rozpozná, kdy se dva obdélníky překrývají:
```javascript
function intersectRect(r1, r2) {
return !(
r2.left > r1.right ||
r2.right < r1.left ||
r2.top > r1.bottom ||
r2.bottom < r1.top
);
}
```
**Algoritmus:**
- **Testuje** čtyři separační podmínky mezi obdélníky
- **Vrací** `false` pokud je některá podmínka oddělení splněna
- **Signalizuje** kolizi, pokud není oddělení
- **Používá** negaci pro efektivní test průniku
#### 3. Implementujte systém hromadné střelby laserem
Teď to bude zábava! Nastavíme systém střelby laserem.
##### Konstanty zpráv
Nejprve definujeme typy zpráv, aby části hry mohly mezi sebou komunikovat:
```javascript
KEY_EVENT_SPACE: "KEY_EVENT_SPACE",
COLLISION_ENEMY_LASER: "COLLISION_ENEMY_LASER",
COLLISION_ENEMY_HERO: "COLLISION_ENEMY_HERO",
```
**Tyto konstanty:**
- **Standardizují** názvy událostí v celé aplikaci
- **Umožňují** konzistentní komunikaci mezi systémy hry
- **Zabraňují** překlepům při registraci ovladačů událostí
##### Zpracování klávesnice
Přidejte detekci mezerníku do posluchače kláves:
```javascript
} else if(evt.keyCode === 32) {
eventEmitter.emit(Messages.KEY_EVENT_SPACE);
}
```
**Tento handler:**
- **Zachycuje** stisk mezerníku pomocí keyCode 32
- **Vysílá** standardizovanou událost
- **Umožňuje** oddělení logiky střelby
##### Nastavení posluchače událostí
Zaregistrujte chování střelby ve funkci `initGame()`:
```javascript
eventEmitter.on(Messages.KEY_EVENT_SPACE, () => {
if (hero.canFire()) {
hero.fire();
}
});
```
**Tento posluchač:**
- **Reaguje** na události mezerníku
- **Kontroluje** stav cooldownu střelby
- **Spouští** vytvoření laseru, když je dovoleno
Přidejte zpracování kolizí laser-nepřítel:
```javascript
eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => {
first.dead = true;
second.dead = true;
});
```
**Tento handler kolizí:**
- **Přijímá** data o kolizi s oběma objekty
- **Označuje** oba objekty k odstranění
- **Zajišťuje** správné vyčištění po kolizi
#### 4. Vytvořte třídu Laser
Implementujte laserovou střelu, která se pohybuje nahoru a spravuje svůj životní cyklus:
```javascript
class Laser extends GameObject {
constructor(x, y) {
super(x, y);
this.width = 9;
this.height = 33;
this.type = 'Laser';
this.img = laserImg;
let id = setInterval(() => {
if (this.y > 0) {
this.y -= 15;
} else {
this.dead = true;
clearInterval(id);
}
}, 100);
}
}
```
**Implementace této třídy:**
- **Dědí** z GameObject a získává základní funkce
- **Nastavuje** vhodné rozměry laserového sprite
- **Vytváří** automatický pohyb nahoru pomocí `setInterval()`
- **Řeší** samodestrukci po dosažení horního okraje obrazovky
- **Řídí** časování animace a čištění
#### 5. Implementujte systém detekce kolizí
Vytvořte komplexní funkci pro detekci kolizí:
```javascript
function updateGameObjects() {
const enemies = gameObjects.filter(go => go.type === 'Enemy');
const lasers = gameObjects.filter(go => go.type === "Laser");
// Test kolizí laser-voják
lasers.forEach((laser) => {
enemies.forEach((enemy) => {
if (intersectRect(laser.rectFromGameObject(), enemy.rectFromGameObject())) {
eventEmitter.emit(Messages.COLLISION_ENEMY_LASER, {
first: laser,
second: enemy,
});
}
});
});
// Odstranit zničené objekty
gameObjects = gameObjects.filter(go => !go.dead);
}
```
**Tento systém:**
- **Filtruje** herní objekty podle typu pro efektivní kontrolu
- **Testuje** každý laser proti každému nepříteli na průnik
- **Vysílá** události kolize při detekci průniku
- **Čistí** zničené objekty po zpracování kolizí
> ⚠️ **Důležité**: Přidejte `updateGameObjects()` do hlavní smyčky hry ve `window.onload`, aby byla detekce kolizí aktivní.
#### 6. Přidejte cooldown systém do třídy Hero
Vylepšete třídu Hero o střelbu a omezení rychlosti:
```javascript
class Hero extends GameObject {
constructor(x, y) {
super(x, y);
this.width = 99;
this.height = 75;
this.type = "Hero";
this.speed = { x: 0, y: 0 };
this.cooldown = 0;
}
fire() {
gameObjects.push(new Laser(this.x + 45, this.y - 10));
this.cooldown = 500;
let id = setInterval(() => {
if (this.cooldown > 0) {
this.cooldown -= 100;
} else {
clearInterval(id);
}
}, 200);
}
canFire() {
return this.cooldown === 0;
}
}
```
**Rozšířená třída Hero:**
- **Inicializuje** cooldown timer na nule (připraveno ke střelbě)
- **Vytváří** laserové objekty umístěné nad lodí hrdiny
- **Nastavuje** dobu cooldownu pro omezení rychlosti střelby
- **Snižuje** cooldown pomocí intervalových aktualizací
- **Poskytuje** metodu `canFire()` pro kontrolu připravenosti ke střelbě
### 🔄 **Pedagogická kontrola**
**Úplné pochopení systému**: Zkontrolujte svoji znalost detekce kolizí:
- ✅ Jak hranice obdélníků umožňují efektivní detekci kolizí?
- ✅ Proč je správa životního cyklu objektů klíčová pro stabilitu hry?
- ✅ Jak systém cooldownu zabraňuje problémům s výkonem?
- ✅ Jakou roli hraje architektura založená na událostech při zpracování kolizí?
**Integrace systému**: Vaše detekce kolizí demonstruje:
- **Matematickou přesnost**: Algoritmy průniku obdélníků
- **Optimalizaci výkonu**: Efektivní vzory testování kolizí
- **Správu paměti**: Bezpečné vytváření a mazání objektů
- **Koordinaci událostí**: Oddělenou komunikaci systémů
- **Zpracování v reálném čase**: Aktualizace založené na snímcích
**Profesionální vzory**: Implementovali jste:
- **Oddělení odpovědností**: Fyzika, vykreslování a vstup odděleny
- **Objektově orientovaný design**: Dědičnost a polymorfismus
- **Správu stavů**: Životní cyklus objektů a sledování stavu hry
- **Optimalizaci výkonu**: Efektivní algoritmy pro použití v reálném čase
### Testování implementace
Vaše vesmírná hra nyní obsahuje kompletní detekci kolizí a bojové mechaniky. 🚀 Otestujte nové funkce:
- **Ovládejte** pohyb pomocí šipek
- **Střílejte lasery** mezerníkem všimněte si, jak cooldown zabraňuje spamu
- **Sledujte kolize** laserů s nepřáteli, které vyvolávají odstranění
- **Ověřte** čištění, kdy zničené objekty mizí ze hry
Úspěšně jste implementovali systém detekce kolizí pomocí stejných matematických principů, které používají navigace kosmických lodí a robotika.
### ⚡ **Co můžete udělat během příštích 5 minut**
- [ ] Otevřete si vývojářské nástroje prohlížeče a nastavte breakpointy ve funkci pro detekci kolizí
- [ ] Vyzkoušejte změnit rychlost laseru nebo pohyb nepřátel a pozorujte efekty kolizí
- [ ] Experimentujte s různými hodnotami cooldownu a testujte rychlost střelby
- [ ] Přidejte příkazy `console.log` pro sledování kolizí v reálném čase
### 🎯 **Co můžete během této hodiny zvládnout**
- [ ] Dokončit kvíz po lekci a pochopit algoritmy detekce kolizí
- [ ] Přidat vizuální efekty jako výbuchy při kolizích
- [ ] Implementovat různé typy projektilů s různými vlastnostmi
- [ ] Vytvořit power-upy, které dočasně posílí schopnosti hráče
- [ ] Přidat zvukové efekty, aby byly kolize uspokojivější
### 📅 **Váš týdenní programování fyziky**
- [ ] Dokončit kompletní vesmírnou hru s vylepšenými kolizními systémy
- [ ] Implementovat pokročilé kolizní tvary nad rámec obdélníků (kruhy, mnohoúhelníky)
- [ ] Přidat částicové systémy pro realistické efekty výbuchů
- [ ] Vytvořit složité chování nepřátel s vyhýbáním kolizím
- [ ] Optimalizovat detekci kolizí pro lepší výkon při mnoha objektech
- [ ] Přidat simulaci fyzikálních veličin jako hybnost a realistický pohyb
### 🌟 **Váš měsíční mistr fyziky her**
- [ ] Stavět hry s pokročilými fyzikálními enginy a realistickými simulacemi
- [ ] Naučit se 3D detekci kolizí a algoritmy prostorového dělení
- [ ] Přispívat do open source fyzikálních knihoven a herních enginů
- [ ] Ovládnout optimalizaci výkonu pro graficky náročné aplikace
- [ ] Vytvářet vzdělávací obsah o herní fyzice a detekci kolizí
- [ ] Budovat portfolio demonstrující pokročilé programování fyziky
## 🎯 Váš časový plán ovládnutí detekce kolizí
```mermaid
timeline
title Pokrok ve výuce detekce kolizí a herní fyziky
section Základy (10 minut)
Rectangle Math: Souřadnicové systémy
: Výpočty hranic
: Sledování pozice
: Správa rozměrů
section Návrh algoritmu (20 minut)
Intersection Logic: Testování oddělení
: Detekce překryvu
: Optimalizace výkonu
: Řešení okrajových případů
section Implementace hry (30 minut)
Object Systems: Správa životního cyklu
: Koordinace událostí
: Sledování stavů
: Úklid paměti
section Interaktivní funkce (40 minut)
Combat Mechanics: Systémy projektilů
: Časy na znovupoužití zbraní
: Výpočet poškození
: Vizuální zpětná vazba
section Pokročilá fyzika (50 minut)
Real-time Systems: Optimalizace snímkové frekvence
: Prostorové dělení
: Reakce na kolize
: Simulace fyziky
section Profesionální techniky (1 týden)
Game Engine Concepts: Systémy komponent
: Fyzikální pipeline
: Profilování výkonu
: Optimalizace pro různé platformy
section Průmyslové aplikace (1 měsíc)
Production Skills: Optimalizace ve velkém měřítku
: Týmová spolupráce
: Vývoj enginu
: Nasazení na platformy
```
### 🛠️ Shrnutí vašeho herního fyzikálního nástroje
Po absolvování této lekce ovládáte:
- **Matematiku kolizí**: Algoritmy průniku obdélníků a souřadnicové systémy
- **Optimalizaci výkonu**: Efektivní detekci kolizí pro realtime aplikace
- **Správu životního cyklu objektů**: Bezpečné vytváření, aktualizace a destrukce
- **Architekturu řízenou událostmi**: Oddělené systémy pro reakce na kolize
- **Integraci do herní smyčky**: Aktualizace fyziky a koordinace vykreslování po snímcích
- **Vstupní systémy**: Reagující ovládání s omezením frekvence a zpětnou vazbou
- **Správu paměti**: Efektivní poolování objektů a strategie čištění
**Reálné použití**: Vaše dovednosti detekce kolizí najdou uplatnění v:
- **Interaktivních simulacích**: Vědecké modelování a vzdělávací nástroje
- **Návrhu uživatelského rozhraní**: Drag-and-drop interakce a detekce dotyku
- **Vizualizaci dat**: Interaktivní grafy a klikatelné prvky
- **Mobilním vývoji**: Rozpoznávání dotykových gest a řešení kolizí
- **Programování robotiky**: Plánování cest a vyhýbání překážkám
- **Počítačové grafice**: Ray tracing a prostorové algoritmy
**Profesní dovednosti získané**: Nyní umíte:
- **Navrhovat** efektivní algoritmy pro realtime detekci kolizí
- **Implementovat** fyzikální systémy škálující s komplexitou objektů
- **Ladit** složité interakční systémy pomocí matematických principů
- **Optimalizovat** výkon pro různé hardware a schopnosti prohlížečů
- **Architektovat** udržovatelné herní systémy využitím osvědčených návrhových vzorů
**Ovládnuté herní koncepty**:
- **Simulace fyziky**: Realtime detekce a reakce na kolize
- **Výkonnostní inženýrství**: Optimalizované algoritmy pro interaktivní aplikace
- **Systémy událostí**: Oddělená komunikace mezi herními komponentami
- **Správa objektů**: Efektivní životní cyklus dynamického obsahu
- **Zpracování vstupu**: Reagující ovládání s odpovídající zpětnou vazbou
**Další krok**: Jste připraveni prozkoumat pokročilé fyzikální enginy jako Matter.js, implementovat 3D detekci kolizí nebo vytvářet složité částicové systémy!
🌟 **Ocenění dosaženo**: Vybudovali jste kompletní systém interakce založený na fyzice s profesionální detekcí kolizí!
## Výzva GitHub Copilot Agent 🚀
Použijte režim Agenta k dokončení následující výzvy:
**Popis:** Vylepšete systém detekce kolizí implementací power-upů, které náhodně vznikají a poskytují dočasné schopnosti po sebrání hrdinou.
**Úkol:** Vytvořte třídu PowerUp, která rozšiřuje GameObject, a implementujte detekci kolizí mezi hrdinou a power-upy. Přidejte alespoň dva typy power-upů: jeden zvyšující rychlost střelby (zkracující cooldown) a druhý vytvářející dočasný štít. Zahrňte logiku spawnování, která vytváří power-upy v náhodných intervalech a pozicích.
---
## 🚀 Výzva
Přidejte explozi! Podívejte se na herní zdroje v [repozitáři Space Art](../../../../6-space-game/solution/spaceArt/readme.txt) a zkuste přidat explozi, když laser zasáhne mimozemšťana
## Kvíz po přednášce
[Kvíz po přednášce](https://ff-quizzes.netlify.app/web/quiz/36)
## Revize a samostudium
Experimentujte s intervaly ve vaší hře dosud. Co se stane, když je změníte? Přečtěte si více o [JavaScript časovacích událostech](https://www.freecodecamp.org/news/javascript-timing-events-settimeout-and-setinterval/).
## Zadání
[Prozkoumejte kolize](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Prohlášení o vyloučení odpovědnosti**:
Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro zásadní informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo mylné výklady vyplývající z použití tohoto překladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->