Lua Academy · Lektion

Komponentbaserad skriptning

Utforma spelentiteter som tabeller med beteendekomponenter i Lua.

Lektion 2 av 413 steg

Komponentbaserad skriptning är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad är komponentbaserad design?

I stället för djupa klasshierarkier sätts entiteter samman av komponenter – små, fokuserade tabeller med data och beteende. En entitet är helt enkelt en samling komponenter.

Entiteten som tabell

En entitet är en tabell med ett id och en undertabell med namnet components. Komponenter läggs till och tas bort under körning.

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

Lägga till komponenter

Koppla en komponent genom att ange en namngiven nyckel i komponenttabellen.

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

System bearbetar komponenter

Ett system bearbetar alla entiteter som har den uppsättning komponenter som krävs. System itererar över entiteter och uppdaterar 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

Koppla Lua-funktioner som komponentbeteende – en enkel form av skriptning per entitet.

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

Komponentregister

Ett register mappar komponenttypsnamn till factory-funktioner, vilket gör det möjligt att skapa komponenter utifrån namn, till exempel från en level-fil.

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

Ta bort komponenter

Sätt komponenten till nil för att ta bort den. Entiteten ignoreras då av system som kräver komponenten.

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

World och entitetshanterare

Ett World-objekt lagrar alla entiteter och system, itererar över systemen vid varje tick och tillhandahåller API:er för entitetsfrågor.

Fråga efter entiteter utifrån komponent

Tillhandahåll en frågefunktion som returnerar alla entiteter som har samtliga angivna komponenter.

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

Prefabs

En prefab är en malltabell med komponenter. Skapa nya entiteter från prefabs genom att djupkopiera mallen.

Fördelar jämfört med arv

  • Inga djupa hierarkier.
  • Beteenden kombineras under körning.
  • Enkelt att lägga till och ta bort funktioner.
  • Datastyrt från konfigurationsfiler.

Fråga om komponentdesign

Vad gör ett System i komponentbaserad design?

Repetition: Komponentbaserad skriptning

Entiteter är tabeller med komponenter. System bearbetar entiteter med de komponenter som krävs. Denna frikopplade, datastyrda arkitektur är mer flexibel än djupa arvshierarkier och passar naturligt i Lua.

Gratis att börja

Lär dig Lua med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
40
Lektioner
159

Vanliga frågor

Är lektionen ”Komponentbaserad skriptning” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”Komponentbaserad skriptning”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Komponentbaserad skriptning”?

Utforma spelentiteter som tabeller med beteendekomponenter i Lua. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lua Academy?

Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Komponentbaserad skriptning”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lua Academy-lektionen?

Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Händelsesystem i Lua
  2. Komponentbaserad skriptning
  3. AI-beteende med tillståndsmaskiner
  4. Datadriven konfiguration och hot-reload
← Tillbaka till Lua Academy