Komponenttipohjainen skriptaus
Suunnitelkaa pelientiteetit Lua-taulukoina, joiden toiminnallisuus koostuu komponenteista.
Komponenttipohjainen skriptaus on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä komponenttipohjainen suunnittelu on?
Syvien luokkahierarkioiden sijaan entiteetit koostetaan komponenteista — pienistä ja tarkasti rajatuista dataa ja toimintaa sisältävistä taulukoista. Entiteetti on vain komponenttien kokoelma.
Entiteetti taulukkona
Entiteetti on taulukko, jolla on id ja components-alitaulukko. Komponentteja lisätään ja poistetaan ajon aikana.
local function newEntity(id)
return {id = id, components = {}}
end
local player = newEntity(1)Komponenttien lisääminen
Liitä komponentti määrittämällä nimetty avain komponenttitaulukkoon.
player.components.position = {x=0, y=0}
player.components.health = {hp=100, max=100}
player.components.sprite = {image="player.png", scale=1}Järjestelmät käsittelevät komponentteja
Järjestelmä käsittelee kaikkia entiteettejä, joilla on vaadittu komponenttijoukko. Järjestelmät käyvät entiteetit läpi ja päivittävät komponenttien dataa.
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
endKomponenttiskriptit
Liitä Lua-funktioita komponentin toiminnaksi — tämä on yksinkertainen tapa skriptata entiteettikohtaista toimintaa.
player.components.ai = {
update = function(self, entity, dt)
-- move towards target
end
}Komponenttirekisteri
Rekisteri yhdistää komponenttityyppien nimet tehdasfunktioihin, jolloin komponentteja voidaan luoda nimen perusteella, esimerkiksi kenttätiedostosta.
local registry = {}
function registry.register(name, factory)
registry[name] = factory
end
function registry.create(name, ...)
return registry[name](...)
endKomponenttien poistaminen
Aseta komponentin arvoksi nil poistaaksesi sen. Tämän jälkeen järjestelmät, jotka vaativat kyseisen komponentin, ohittavat entiteetin.
player.components.health = nil -- entity is "dead"World- ja entiteettienhallinta
World-objekti tallentaa kaikki entiteetit ja järjestelmät, käy järjestelmät läpi jokaisella tikillä ja tarjoaa entiteettien kyselyrajapinnat.
Entiteettien kysely komponentin perusteella
Toteuta kyselyfunktio, joka palauttaa kaikki entiteetit, joilla on kaikki määritetyt komponentit.
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
endEsimuodostetut objektit
Prefab on komponenttien mallitaulukko. Luo siitä uusia entiteettejä kopioimalla malli syväkopioinnilla.
Periytymisen edut
- Ei syviä hierarkioita.
- Toiminta voidaan yhdistää ajon aikana.
- Ominaisuuksia on helppo lisätä ja poistaa.
- Toiminta perustuu määritystiedostojen dataan.
Komponenttisuunnittelua koskeva kysymys
Mitä System tekee komponenttipohjaisessa suunnittelussa?
Kertaus: komponenttipohjainen skriptaus
Entiteetit ovat komponenttien taulukoita. Järjestelmät käsittelevät entiteettejä, joilla on vaaditut komponentit. Tämä löyhästi kytketty ja dataohjautuva arkkitehtuuri on joustavampi kuin syvät periytymishierarkiat ja toimii luontevasti Luassa.
Opi Lua tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 40
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Komponenttipohjainen skriptaus” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Komponenttipohjainen skriptaus”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Komponenttipohjainen skriptaus”?
Suunnitelkaa pelientiteetit Lua-taulukoina, joiden toiminnallisuus koostuu komponenteista. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Komponenttipohjainen skriptaus”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?
Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Tapahtumajärjestelmät Luassa
- Komponenttipohjainen skriptaus
- Tekoälyn käyttäytyminen tilakoneilla
- Tietopohjainen määritys ja hot reload