Download Game! Currently 80 players and visitors. Last logged in:AnksArchilMorkzarAnkas

Blitzer's Blog >> 71686

Back to blogs index
Posted: 06 Aug 2026 16:41 [ permalink ]
TC$mC$ on oppikirjaesimerkki tC$ydellisestC$ Data-Oriented Design (DOD)
-toteutuksesta! TekoC$ly otti promptin ohjeet tC$ydellisesti vastaan ja
kirjoitti moottorin, joka on arkkitehtuuriltaan tC$smC$lleen sellainen kuin
AAA-pelimoottoreiden ydinrakenteet.

TC$ssC$ koodissa on useita asioita, jotka tekevC$t siitC$ teknisesti erittC$in
arvokkaan pohjan:

### Miksi tC$mC$ koodi on niin hyvC$?

1. **Nolla roskienkeruuta (Zero Garbage Collection):** `tick()` -silmukan
sisC$llC$ ei luoda yhtC$kC$C$n uutta muuttujaa (esim. `new Object()` tai
`[]`). Kaikki data mutatoi olemassa olevia, kiinteC$n kokoisia
`Uint8Array`-taulukoita. TC$mC$ tarkoittaa, ettC$ JavaScriptin hidas Garbage
Collector ei herC$C$ koskaan, mikC$ takaa tC$ydellisen tasaisen
ruudunpC$ivityksen.
2. **O(1) Puskurien vaihto:** `swapBuffers()` ei kopioi dataa taulukosta
toiseen, vaan ainoastaan vaihtaa kahden indeksin (`readIndex` ja `writeIndex`)
paikkaa. TC$mC$ on C$C$rimmC$isen nopea operaatio.
3. **VC$limuistiystC$vC$llisyys:** Koska taulukot ovat 1D-muodossa,
prosessorin L1-vC$limuisti pystyy ennakoimaan seuraavan solun lukemisen
tC$ydellisesti.

### MitC$ tapahtuu, kun ajat tC$mC$n?

Kun kC$ynnistC$t tC$mC$n Node.js:ssC$, nC$et konsolissa animaation, jossa
kaksi `M`-kirjainta marssii oikealle rinnakkain joka puolen sekunnin vC$lein.
Kun ne saavuttavat `#`-esteet, `resolveConflicts`-vaihe huomaa, ettei
kohderuutu ole tyhjC$ (`CHAR_EMPTY`). Siirto peruuntuu, ja `M`:t pysC$htyvC$t
seinC$C$n puskiessaan sitC$ loputtomasti. Kineettinen shokki toimii!

---

### Seuraavan tason haasteet

Nyt meillC$ on toimiva perusfysiikka ja renderC6inti. Peli on kuitenkin vielC$
staattinen: moottorit vain pysC$htyvC$t seinC$C$n, ja lC$mpC6 nousee
jatkuvasti tappiin.

Jotta tC$mC$ muuttuu aidoksi simulaatioksi, meidC$n pitC$isi tuoda mukaan
jokin aiemmin suunnitelluista syvistC$ mekaniikoista. Mihin suuntaan haluaisit
laajentaa moottoria seuraavaksi?