Lua Academy · leksjon

Komponentbasert skripting

Utform spillentiteter som tabeller med funksjonskomponenter i Lua.

Leksjon 2 av 413 trinn

Komponentbasert skripting er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva er komponentbasert design?

I stedet for dype klassehierarkier settes entiteter sammen av komponenter — små, fokuserte tabeller med data og atferd. En entitet er bare en samling komponenter.

Entiteten som en tabell

En entitet er en tabell med en id og en undertabell kalt components. Komponenter legges til og fjernes under kjøring.

local function newEntity(id)
  return {id = id, components = {}}
end
local player = newEntity(1)

Legge til komponenter

Knytt til en komponent ved å angi en navngitt nøkkel i komponenttabellen.

player.components.position = {x=0, y=0}
player.components.health   = {hp=100, max=100}
player.components.sprite   = {image="player.png", scale=1}

Systemer behandler komponenter

Et system behandler alle entiteter som har et påkrevd sett med komponenter. Systemer itererer over entiteter og oppdaterer komponentdata.

local function moveSystem(entities, dt)
  for _, e in ipairs(entities) do
    local pos = e.components.position
    local vel = e.components.velocity
    if pos and vel then
      pos.x = pos.x + vel.dx * dt
      pos.y = pos.y + vel.dy * dt
    end
  end
end

Komponentskript

Knytt Lua-funksjoner til som komponentatferd — en enkel form for skripting per entitet.

player.components.ai = {
  update = function(self, entity, dt)
    -- move towards target
  end
}

Komponentregister

Et register kobler komponenttypenavn til fabrikkfunksjoner, slik at komponenter kan opprettes etter navn (for eksempel fra en brettfil).

local registry = {}
function registry.register(name, factory)
  registry[name] = factory
end
function registry.create(name, ...)
  return registry[name](...)
end

Fjerne komponenter

Sett komponenten til nil for å fjerne den. Entiteten ignoreres deretter av systemer som krever komponenten.

player.components.health = nil  -- entity is "dead"

Verden og entitetsbehandler

Et World-objekt lagrer alle entiteter og systemer, itererer over systemene for hver tikk og tilbyr API-er for entitetsspørringer.

Spørre etter entiteter etter komponent

Tilby en spørringsfunksjon som returnerer alle entiteter som har alle de angitte komponentene.

local function query(world, ...)
  local required = {...}
  local result = {}
  for _, e in ipairs(world.entities) do
    local ok = true
    for _, comp in ipairs(required) do
      if not e.components[comp] then ok = false; break end
    end
    if ok then result[#result+1] = e end
  end
  return result
end

Prefabrikkerte objekter

Et prefabrikkert objekt er en maltabell med komponenter. Opprett nye entiteter fra prefabrikkerte objekter ved å dypkopiere malen.

Fordeler fremfor arv

  • Ingen dype hierarkier.
  • Atferd blandes under kjøring.
  • Funksjoner er enkle å legge til og fjerne.
  • Datadrevet fra konfigurasjonsfiler.

Spørsmål om komponentdesign

Hva gjør et System i komponentbasert design?

Oppsummering: Komponentbasert skripting

Entiteter er tabeller med komponenter. Systemer behandler entiteter med de påkrevde komponentene. Denne frakoblede, datadrevne arkitekturen er mer fleksibel enn dype arvshierarkier og fungerer naturlig i Lua.

Gratis å komme i gang

Lær deg Lua med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
40
Leksjoner
159

Ofte stilte spørsmål

Er leksjonen «Komponentbasert skripting» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Komponentbasert skripting», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Komponentbasert skripting»?

Utform spillentiteter som tabeller med funksjonskomponenter i Lua. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lua Academy?

Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Komponentbasert skripting»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?

Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hendelsessystemer i Lua
  2. Komponentbasert skripting
  3. AI-atferd med tilstandsmaskiner
  4. Datadrevet konfigurasjon og hot-reload
← Tilbake til Lua Academy