Komponentbaserad skriptning
Utforma spelentiteter som tabeller med beteendekomponenter i Lua.
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
endKomponentskript
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](...)
endTa 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
endPrefabs
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.
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
- Händelsesystem i Lua
- Komponentbaserad skriptning
- AI-beteende med tillståndsmaskiner
- Datadriven konfiguration och hot-reload