A love_aliases.lua modulban célszerű megadni globális Love2D könyvtár rövidítéseket, ami alapból ezeket tartalmazza:
LG:love.graphicsLA:love.audioLK:love.keyboard
A játék részeit külön "State"-ekre bontjuk, amiket az alábbi "class" modellez:
init: fun()update: fun()draw: fun(alpha: number)
A következő bemenet kezelési mezőket megadni opcionális.
mouseMoved: nil | fun(x: number, y: number, dx: number, dy: number, isTouch: boolean)mousePressed: nil | fun(x: number, y: number, button: number, isTouch: boolean)mouseReleased: nil | fun(x: number, y: number, button: number, isTouch: boolean)keyPressed: nil | fun(key: love.KeyConstant, scancode: love.Scancode, isRepeat: boolean)keyReleased: nil | fun(key: love.KeyConstant, scancode: love.Scancode)
Egyszerre mindig csak egy State lehet aktív (plusz egy speciális, a background.lua-ban definiált State ami a scalelt kijelző körülötti üres teret tölti ki), és változtatni a ChangeState(s: State) függvénnyel lehet, ami autómatikusan meghívja az adott init() függvényt is.
Minden State-t **kötelező hozzáadni a states.lua fájlhoz, hogy globálisan elérhető legyen.
Az erőforrások könnyebb kezelése érdekében ezeket globális változókban tároljuk, és a megfelelő fájlba kell beírni őket resources/ mappába.
Hanganyagokat az audio.lua fájlba kell megírni: a hangeffektek az SFX táblába, a háttérzene pedig a BGM táblába kerül. Ezeket az új NewBGM és NewSFX függvényekkel célszerű létrehozni:
BGM = {
menu = NewBGM("random_fajlnev.wav"),
gameOver = NewBGM("valami_zene2.wav"),
-- stb stb
}
SFX = {
ugras = NewSFX("valami_effekt.wav"),
coin = NewSFX("bullshit_fajlnev.wav"),
-- stb stb
}
Ezeket célszerű az új Audio(source: love.Source) wrapper-el használni, mivel ezzel a nem betölthető hangfájlokat szokványos módon kezeljük, így nem kell átírni a kódot ha meglesz a konkrét fájl:
SFX = {
-- Még nincs ugrás hangeffekt!
ugras = nil
}
-- valahol máshol --
SFX.ugras:play() -- CRASH!!
Audio(SFX.ugras):play() -- Nincs hiba, csak csend!A képi erőforrások a sprites.lua fájlba mennek, és két féle módon lehet alkalmazni a fájlt:
- Spritesheet használatával
SPRITESHEET = LG.newImage("spritesheet_fajl.png")
-- A SPRITES Quad-okat tárol
SPRITES = {
upWall = LG.newQuad(0, 0, 16, 16, ...)
leftWall = LG.newQuad(16, 0, 16, 16, ...)
-- stb stb
}- Külön sprite-ok használatával
SPRITESHEET = nil -- muszáj nil-nek lenni!
-- A SPRITES Image-eket tartalmaz
SPRITES = {
upWall = LG.newImage("upwall.png")
leftWall = LG.newImage("leftwall.png")
}Ezeknek rugalmas kezeléséhez használjuk az új LG.spr() függvényt, ami automatikusan kezeli mindkét féle rajzolást:
LG.spr(SPRITES.upWall, x, y)Sosem kell használni a spritesheet-et, mindkét esetben elég a sprite-ot megadni. A spr() függvény továbbá nem pánikol, ha nem létező sprite-ot kéne rajzolni, helyette egy piros placeholder doboz-t rajzol.
Az x és y paraméterek valamint opcionálisak: lehagyás / nil érték esetén a sprite középre lesz igazítva az adott tengelyen.
Ezzel a fügvénnyel lehet kicserélni az aktív State-t. Automatikusan meghívja az adott State init() függvényét.
Nem kell törődni vele, ide van begyömöszölve minden extra dolog amit nem kell módosítani.
Standard Love2D config fájl: https://love2d.org/wiki/Config_Files
Globális konstansok, főleg méretezéshez.
A scalel-t ablakot körülvevő keretre rajzoló State forrása.
Ide kell hozzáadni az új State-eket, a példákhoz hasonlóan.