- Předmět:
PG1
- Stačí spustit soubor
dist/index.html
v prohlížeči.
- Pro vypracování semestrální jsem použil TypeScript - typování pomáhá při tvorbě projektu.
- Všechny soubory jsou v adresáři
src
. V adresářidist
zkompilované soubory, které lze spustit v prohlížeči. - Vstupem aplikace je
main.ts
, který obsluhuje UI (stránku) a spouští novou hru.
- Třída
game/Game.ts
obsahuje základní prvky hry- připraví obrazovku (třída
game/Screen.ts
se stará o scene, renderer a kameru) - připraví třídu
game/Borders.ts
(ta se stará o zjištění kolizí s hranicí herní plochy)- Používá metodu
containsBox
- Používá metodu
- míček (jen ho přidá)
- připraví obrazovku (třída
- Do třídy
Game
vstupuje gamemode - ten řídí logiku hry. Základním gamemodem je NormalGameMode, který už obsahuje nastavení ovládání hracích pádel a poslouchá na eventy od jiných komponent - ty dědíobjects/base/Observable.ts
.
- THREE.js objekty jsou zapouzdřené ve třídách, které implementují rozhraní
objects/base/IObject.ts
. Ta předepisuje:getObject()
pro získání Mesh objektuget/setPosition()
pro nastavení pozice objektu- Pozice je objekt
containers/PositionVector
(defaktoVector3
, ale chtěl jsem mezi nima mít trochu rozdíl)
- Pozice je objekt
get/setVelocity()
pro nastavení rychlosti- Také jako Vector3
update()
pro provedení změn při překreslení - např. posunutí objektu o jeho rychlost (position + velocity)
- Dalším důležitým managerem je
managers/Collion.ts
, který umožňuje definovat pár objektů a callback, který se zavolá po jejich kolizi- využívá metodu
intersectsBox
- Obsahuje metodu
update()
, ve které se provádí kontrola kolizí párů
- využívá metodu
- Herní hranice se řeší v
game/Borders.ts
. Obsahuje metodugetObject()
, která vrací BoxHelper. Ten je použit pro zjištění kolizí s hranicemi herní plochy.- Využívá metodu
intersectsBox
- Využívá metodu
- Měl jsem v plánu udělat nastavení ovládání v UI, ale nakonec nezbyl čas. Velká část toho je ale připravená.
- V rámci Game/GameModu se akce definují přes název (LEFT_PLAYER_UP). Ten se registruje
do
managers/ControlsManager.ts
, který slouží jako abstrakce nadKeyPressManagerem
. Pokud by se tedy do ControlsManageru přidala metodaupdate(name, key)
, tak by se dalo změnit ovládání v runtime.
- V rámci Game/GameModu se akce definují přes název (LEFT_PLAYER_UP). Ten se registruje
do
Vypracoval Vojtěch Voleman © 2022-23