Ca:Scripted levels
Contents
- 1 Introducció
- 2 Funcions anomenades per l'X-Moto
- 3 Funcions de l'X-Moto
- 3.1 GetTime()
- 3.2 Message(msgs)
- 3.3 ClearMessages()
- 3.4 SetGravity(x, y)
- 3.5 GetGravity()
- 3.6 IsPlayerInZone(zone)
- 3.7 SetPlayerPosition(x, y, bRight)
- 3.8 GetPlayerPosition()
- 3.9 SetEntityPos(entity, x, y)
- 3.10 GetEntityPos(entity)
- 3.11 SetKeyHook(key, function)
- 3.12 GetKeyByAction(function)
- 3.13 Log(msgs)
- 3.14 MoveBlock(block, x, y)
- 3.15 SetBlockCenter(block, x, y)
- 3.16 SetBlockPos(block, x, y)
- 3.17 GetBlockPos(block)
- 3.18 SetBlockRotation(block, angle)
- 3.19 SetDynamicEntityRotation(entity, initAngle, radius, period, startTime, endTime)
- 3.20 SetDynamicEntityTranslation(entity, fX, fY, period, startTime, endTime)
- 3.21 SetDynamicEntityNone(entity)
- 3.22 SetDynamicBlockRotation(block, initAngle, radius, period, startTime, endTime)
- 3.23 SetDynamicBlockTranslation(block, fX, fY, period, startTime, endTime)
- 3.24 SetDynamicBlockNone(block)
- 3.25 CameraZoom(z)
- 3.26 CameraMove(x, y)
- 3.27 GetEntityRadius(entity)
- 3.28 IsEntityTouched(entity)
- 3.29 KillPlayer()
- 3.30 KillEntity(entityID)
- 3.31 WinPlayer()
- 3.32 RemainingStrawberries()
Introducció
Els Scripts fan que un nivell esdevingui dinàmic. Pots canviar algunes propietats físiques, moure objectes, modificar la logica del joc, etc. Un script esta fet amb el llenguatge Lua i es pot afegir al arxiu del nivell.
La documentació sobre el llenguatge Lua la pots trobar aquí: http://www.lua.org/manual/5.1/
Per fer un script, has de saber almenys una mica sobre l'arxiu de nivell. Es un arxiu XML. Inclou propietats com el nom del nivell, la seva descripció ... A mès, inclou les definicions dels blocs i les figures. Un bloc es composa per vèrtex que son punts units per formar un polígon.
Per presentar la forma d'escriure un script, lo següent es un nivell basic que utilitzarem d'exemple:
<?xml version="1.0" encoding="utf-8"?> <level id="tutscript"> <info> <name>tutscript</name> <description></description> <author></author> <date></date> <sky>sky1</sky> </info> <script> </script> <limits left="0" right="50" top="30" bottom="0"/> <block id="Block0"> <position x="0" y="0"/> <usetexture id="default"/> <vertex x="5" y="5"/> <vertex x="5" y="10"/> <vertex x="10" y="10"/> <vertex x="10" y="5"/> </block> <entity id="MyPlayerStart0" typeid="PlayerStart"> <size r="0.4"/> <position x="7.5" y="10"/> </entity> <entity id="Strawberry0" typeid="Strawberry"> <size r="0.4"/> <position x="20" y="0.5"/> </entity> <entity id="SnowMan0" typeid="Sprite"> <param name="name" value="SnowMan"/> <position x="19" y="0.2"/> <param name="z" value="-1"/> </entity> <zone id="Zone0"> <box left="40" right="50" top="5" bottom="0"/> </zone> </level>
Aquest nivell es pot fer fàcilment amb l'xmoto-edit. Inclou un bloc anomenat Block0 que es un quadrat, una maduixa anomenada Strawberry0 i una zona anomenada Zone0. Una zona es una part invisible del nivell que farà que s'executin accions quan el jugador estigui a dins.
Algunes funcions requereixen una mínima versió de l'xmoto per a funcionar. Si fas servir alguna d'aquestes funcions, si us plau, posa aquesta informació en l'arxiu del nivell. Per exemple, per fer que el teu nivell requereixi l'X-Moto 0.2.0, afegeix aquesta linea al codi del teu nivell:
<level id="tutscript" rversion="0.2.0">
Tot el codi de l'script es llenguatge Lua. Pots trobar la sintaxis aquí. De totes maneres, si esculls incloure l'script dins d'un arxiu XML, els símbols < i > s'han de reemplaçar amb < i >. El codi de l'script es pot afegir entre <script> i </script> dins de l'arxiu del nivell.
Funcions anomenades per l'X-Moto
OnLoad()
Explicació
Aquest funció es anomenada un cop a l'inici del nivell. Has de retornar true si res dolent succeeix.
Exemple d'Script
L'exemple mostra un missatge a l'inici del nivell.
function OnLoad() Game.Message("This level is scripted") return true end
Tick()
Explicació
Funció nomenada un cop en cada centèsima de segon. Has de retornar true si res dolen succeeix
Exemple d'Script
Aquest exemple s'iniciara amb gravetat 0 ; desprès, anirà incrementant-se amb el temps. Com que la gravetat de la terra es 9.81, no hi haurà gravetat terrestre fins assolir els 9.81 segons. Fixa't que en l'xmoto la gravetat vertical s'ha de multiplicar per -1 perquè les coordenades de la pantalla estan invertides.
function Tick() if Game.GetTime() < 9.81 then Game.SetGravity(0, Game.GetTime() * -1) end return true end function Load() Game.SetGravity(0, 0) return true end
Entity.Touch()
Explicació
Aquesta funció es anomenada quan una figura (una maduixa per exemple) es tocada. La figura s'ha de declarar en l'script. Fixa't que el paràmetre <size r> permet escollir el marge de la distancia que es considera per que una figura sigui tocada.
Exemple d'Script
L'exemple mostra un missatge quan es toca una maduixa.
Strawberry0 = {} function Strawberry0.Touch() Game.Message("Nice strawberry !") end
Zone.OnEnter()
Explicació
Aquesta funció es anomenada quan el jugador entra en una zona.
Exemple d'Script
L'exemple mostra un missatge quan el jugador entra en la zona anomenada Zone0.
Zone0 = {} function Zone0.OnEnter() Game.Message("Entering in the zone") end
Zone.OnLeave()
Explicació
Aquesta funció es anomenada quan el jugador surt d'una zona.
Exemple d'Script
L'exemple mostra un missatge quan el jugador surt de la zona anomenada Zone0.
Zone0 = {} function Zone0.OnLeave() Game.Message("Leaving the zone") end
OnSomersault(bClockWise)
[require Xmoto >= 0.2.1]
Explicació
Aquesta funció es anomenada cada cop que el jugador fa una tombarella. Si bClockWise es 1 la tombarella segueix les agulles del rellotge, si es 0 es al reves.
Exemple d'Script
L'exemple mostra un missatge quan el jugador fa una tombarella.
function OnSomersault(bClockWise) if(bClockWise == 1) then Game.Message("ClockWise Somersault") else Game.Message("CounterClockWise Somersault") end end
OnWheel1Touchs(status), OnWheel2Touchs(status)
[require Xmoto >= 0.2.1]
Explicació
Aquesta funció es anomenada cada cop que la roda 1 toca el terra o s'atura per tocar-lo. (l'estatus es 1 si la roda no estava tocant el terra i ara si el toca, i 0 per les demès situacions)
Exemple d'Script
L'exemple mostra la nova màxima durada d'un salt cada cop que es fa un de nou.
max_jump_time = 1.0 -- start at 1 to not count smaller jumps jump_begin = 0.0 touch_1 = false touch_2 = false function OnWheel1Touchs(bStatus) if(bStatus == 1) then updateMax() touch_1 = true else touch_1 = false jump_begin = Game.GetTime() end end function OnWheel2Touchs(bStatus) if(bStatus == 1) then updateMax() touch_2 = true else touch_2 = false jump_begin = Game.GetTime() end end function updateMax() if(touch_1 == false and touch_2 == false) then if(Game.GetTime() - jump_begin > max_jump_time) then max_jump_time = Game.GetTime() - jump_begin Game.Message("New high jump: "..max_jump_time) end end end
Funcions de l'X-Moto
GetTime()
Explicació
Retorna el temps transcorregut des de l'inici del nivell.
Exemple d'Script
L'exemple mostra un missatge si el jugador triga mes de 10 segons en entrar en una zona.
Zone0 = {} function Zone0.OnEnter() if Game.GetTime() > 10.0 then Game.Message("10 seconds to come there, that's a lot !") end end
Message(msgs)
Explicació
Mostra un missatge en la pantalla. El missatge s'eliminara automàticament desprès de 5 segons. Pots anomenar aquesta funció uns quants cops : els missatges es mostraran tots.
Exemple d'Script
L'exemple mostra alguns missatges al inici de nivell.
function OnLoad() Game.Message("This level is scripted") Game.Message("GO GO GO !!!") return true end
ClearMessages()
Explicació
Elimina els missatges de la pantalla.
Exemple d'Script
L'exemple mostra com eliminar els missatges de la pantalla i mostrar un de nou en algunes circumstancies.
Zone0 = {} function Zone0.OnEnter() Game.ClearMessages() Game.Message("OnEnter") end function Zone0.OnLeave() Game.ClearMessages() Game.Message("OnLeave") end
SetGravity(x, y)
Explicació
Canvia la gravetat en el joc (horitzontal i vertical).
Exemple d'Script
L'exemple mostra com invertir la gravetat. Fixa't que en l'X-Moto, la gravetat s'ha de multiplicar per -1, perquè les coordinades de la pantalla esta invertides en la direcció y.
function OnLoad() Game.SetGravity(0, 9.81) return true end
GetGravity()
Explicació
Retorna el parell (gravetat horitzontal, i gravetat vertical).
Exemple d'Script
L'exemple mostra el vent i la gravetat al inici del nivell.
function OnLoad() x, y = Game.GetGravity() Game.Message("Wind : "..x) Game.Message("Gravity : "..(y*-1)) return true end
IsPlayerInZone(zone)
Explicació
Retorna true si el jugador esta en la zona especificada.
Exemple d'Script
Aquest exemple es una mica mes complicat. Quan el jugador entra en una zona, la gravetat baixa de mica en mica. Un cop el jugador surt de la zona, la gravetat torna a ser 9.81 gradualment.
Zone0 = {} x = -9.81 function Tick() if Game.IsPlayerInZone("Zone0") then Game.SetGravity(0, x) x = x + 0.1 end return true end function Zone0.OnLeave() x = -9.81 Game.SetGravity(0, x) end
SetPlayerPosition(x, y, bRight)
Explicació
Especifica la posició i la direcció del jugador en el joc. bRight pot ésser 0 o 1.
Exemple d'Script
L'exemple tele-transporta al jugador cada cop que entra en la zona.
Zone0 = {} function Zone0.OnEnter() Game.SetPlayerPosition(5, 0, 1) end
GetPlayerPosition()
Explicació
Retorna el triplet (x, y, bRight) que dona la posició del jugador en el joc.
Exemple d'Script
Aquest exemple fa que el jugador no sigui incapaç d'agafar una maduixa ;-)
function Tick() x, y, bright = Game.GetPlayerPosition() if x > 18 then Game.SetPlayerPosition(5, 0, 1) end return true end
SetEntityPos(entity, x, y)
Explicació
Especifica la posició d'una figura en les coordenades (x, y) dins del joc.
Exemple d'Script
L'exemple canvia la posició d'una maduixa cada segon.
function Tick() i,f = math.mod(math.ceil(Game.GetTime()), 2) if i == 1 then Game.SetEntityPos("Strawberry0", 10, 0.5) else Game.SetEntityPos("Strawberry0", 30, 0.5) end return true end
GetEntityPos(entity)
Explicació
Retorna la posició d'una figura dins del joc.
Exemple d'Script
L'exemple mostra una altre manera per moure una maduixa.
last_update = 0 function Tick() sec = math.ceil(Game.GetTime()) if last_update < sec then x, y = Game.GetEntityPos("Strawberry0") if(x == 20) then x_new = 25 else x_new = 20 end if(y == 0.5) then y_new = 2 else y_new = 0.5 end Game.SetEntityPos("Strawberry0", x_new, y_new) last_update = sec end return true end
SetKeyHook(key, function)
Explicació
Quan el jugadpr premi la "tecla" especificada, una funció sera anomenada.
Exemple d'Script
L'exemple mostra com canviar la gravetat simplement premen una tecla.
g = -9.81 function OnLoad() Game.SetKeyHook("G", "GravityChange") return true end function GravityChange() g = g * -1 Game.SetGravity(0, g) end
GetKeyByAction(function)
Explicació
Retorna la tecla asociada a una acció. Les possibles accions son Drive, Brake, PullBack, PushForward, ChangeDirection.
Exemple d'Script
L'exemple mostra per pantalla com conduir al principi del nivell.
function OnLoad() Game.Message("To drive, press "..Game.GetKeyByAction("Drive")) return true end
Log(msgs)
Explicació
Registra un missatge en l'xmoto.log.
Exemple d'Script
L'exemple registra el missatge "An error occured" a l'inici del nivell.
function OnLoad() Game.Log("An error occured") return true end
MoveBlock(block, x, y)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funció permet a l'X-Moto moure un bloc dins d'un nivell. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />). Fixa't que moure un bloc pot ser perillós: assegurat de que el jugador no quedi dins del bloc un cop l'hagis mogut.
Exemple d'Script
En l'exemple, quan el jugador prem la tecla M, el bloc es mou cap a la dreta.
function OnLoad() Game.SetKeyHook("M", "MoveTheBlock") return true end function MoveTheBlock() Game.MoveBlock("Block0", 1, 0) end
SetBlockCenter(block, x, y)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funció dona el centre de un bloc relatiu a la posició del bloc (i del nivell si el bloc es troba a la posició (0, 0)). El centre s'utilitza per les funcions SetBlockPos(), GetBlockPos() i SetBlockRotation(). Aquesta funció s'utilitza generalment en la funció Load() perquè no es lògic tornar a canviar el centre (encara així pots canviar-lo si vols).
Exemple d'Script
En l'exemple, s'especifica el centre de un bloc en el centre de un quadrat. Aleshores, quan el jugador premi M, el bloc es posara a sota del jugador.
function OnLoad() Game.SetKeyHook("M", "PutTheBlock") Game.SetBlockCenter("Block0", 7.5, 7.5) return true end function PutTheBlock() x, y = Game.GetPlayerPosition() Game.SetBlockPos("Block0", x, y -2.5 -1) end
SetBlockPos(block, x, y)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funció permet a l'X-Moto moure un bloc segons el seu centre dins d'un nivell. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />). Fixa't que moure un bloc pot ser perillós: assegurat de que el jugador no quedi dins del bloc un cop l'hagis mogut.
Exemple d'Script
En l'exemple, s'especifica el centre de un bloc en el centre de un quadrat. Aleshores, quan el jugador premi M, el bloc es posara a sota del jugador.
function OnLoad() Game.SetKeyHook("M", "PutTheBlock") Game.SetBlockCenter("Block0", 7.5, 7.5) return true end function PutTheBlock() x, y = Game.GetPlayerPosition() Game.SetBlockPos("Block0", x, y -2.5 -1) end
GetBlockPos(block)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funcio dona la posició d'un bloc donat. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />).
Exemple d'Script
L'exemple mostra com utilitzar aquesta funció com a condició. Ara, pots moure el bloc sota la moto nomes si jugues cap a la dreta.
function OnLoad() Game.SetKeyHook("M", "PutTheBlock") Game.SetBlockCenter("Block0", 7.5, 7.5) return true end function PutTheBlock() x, y = Game.GetPlayerPosition() bx, by = Game.GetBlockPos("Block0") if(x > bx) then Game.SetBlockPos("Block0", x, y -2.5 -1) end end
SetBlockRotation(block, angle)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funció fa rotar als blocs. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />).
Exemple d'Script
En l'exemple, si el jugador deixa premuda la tecla M, el bloc rotara.
a = 0 function OnLoad() Game.SetKeyHook("M", "PutTheBlock") Game.SetBlockCenter("Block0", 7.5, 7.5) return true end function PutTheBlock() a = a + math.pi / 256.0 Game.SetBlockRotation("Block0", a) end
SetDynamicEntityRotation(entity, initAngle, radius, period, startTime, endTime)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funció indica a una figura fer cercles durant un temps donat. La posició actual del radi on es troba la figura en el cercle es en la posició initAngle (in rad). La figura farà un cercle calculat en centèsims. L'animació començara en startTime en centèsims i acabara en endTime en centèsims, així doncs, la duració es endTime-startTime/100 segons. Un endTime de 0 significa una animació infinita. Fixa't que pots compondre rotacions i moviments. Fixa't també que un argument negatiu et permet canviar el comportament de l'animació. Per exemple, un període negatiu farà rotar a la figura en el sentit contrari.
Exemple d'Script
L'exemple mostra com de fàcil es moure una maduixa. L'InitAngle es -PI/2 perquè la maduixa esta a la part baixa d'on volem que es mogui.
function OnLoad() Game.SetDynamicEntityRotation("Strawberry0", -math.pi/2, 2, 500, 0, 0) return true end
SetDynamicEntityTranslation(entity, fX, fY, period, startTime, endTime)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funció permet indicar a una figura que faci un moviment durant un temps donat. La longitud del moviment es fX en l'eix X i fY en l'eix Y. La figura farà el moviment en un temps calculat en centèsims/2. L'animació començara en startTime en centèsims i acabara en endTime en centèsims, així doncs, la duració es endTime-startTime/100 segons. Un endTime de 0 significa una animació infinita. Fixa't que pots compondre rotacions i moviments. Fixa't també que un argument negatiu et permet canviar el comportament de l'animació.
Exemple d'Script
L'exemple mostra la composició d'unes animacions.
function OnLoad() Game.SetDynamicEntityTranslation("Strawberry0", 10, 0, 500, 0, 0) Game.SetDynamicEntityTranslation("Strawberry0", 0, 1, 100, 0, 0) return true end
SetDynamicEntityNone(entity)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funcio elimina totes les animacions aplicades a una figura.
Exemple d'Script
L'exemple demana a una figura fer un moviment en primer lloc i despres, fer una rotació. Si el jugador prem la tecla S, la maduixa es quedara quieta.
function OnLoad() Game.SetDynamicEntityTranslation("Strawberry0", -2, 0, 1000, 0, 500) Game.SetDynamicEntityRotation("Strawberry0", -math.pi/2, 2, 500, 500, 0) Game.SetKeyHook("S", "StopAnimation") return true end function StopAnimation() Game.SetDynamicEntityNone("Strawberry0") end
SetDynamicBlockRotation(block, initAngle, radius, period, startTime, endTime)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funció permet indicar a un bloc fer un cercle durant un temps donat. La posició actual del radi on es troba la figura en el cercle es en la posició initAngle (in rad). El bloc farà un cercle calculat en centèsims. L'animació començara en startTime en centèsims i acabara en endTime en centèsims, així doncs, la duració es endTime-startTime/100 segons. Un endTime de 0 significa una animació infinita. Fixa't que pots compondre rotacions i moviments. Fixa't també que un argument negatiu et permet canviar el comportament de l'animació. Per exemple, un període negatiu farà rotar a la figura en el sentit contrari. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />). No moguis els blocs massa ràpid, sinó la moto podria travessar el bloc.
Exemple d'Script
L'exemple mostra com moure fàcilment un bloc.
function OnLoad() Game.SetDynamicBlockRotation("Block0", -math.pi/2, 2, 500, 0, 0) return true end
SetDynamicBlockTranslation(block, fX, fY, period, startTime, endTime)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funció permet indicar a un bloc que faci un moviment durant un temps donat. Un moviment es una seqüència repetitiva d'anada i tornada entre dos punts donats. La longitud del moviment es fX en l'eix X i fY en l'eix Y. L'animació començara en startTime en centèsims i acabara en endTime en centèsims, així doncs, la duració es endTime-startTime/100 segons. Un endTime de 0 significa una animació infinita. Fixa't que pots compondre rotacions i moviments. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />). No moguis els blocs massa ràpid, sinó la moto podria travessar el bloc.
entity: Defineix quina figura es mou
fX: Defineix on de l'eix X la figura es mou
fY: Defineix on de l'eix Y la figura es mou
period: Defineix, quant trigara la figura en tornar al punt d'origen
startTime: Defineix, quan comença el moviment
endTime: Defineix, quan finalitza el moviment
Amb l'objectiu de fer els arxius de repeticions mes petits, hauries d'utilitzar Translation en comptes de la funció MoveBlock. A sota hi ha un exemple de com convertir una funció MoveBlock en una funció Translation.
Exemple d'Script
En l'exemple, el bloc fa un moviment infinit : Es mou des de el punt d'origen (0,0) fins (10,1) en 750ms, i retorna de nou 750ms.
function OnLoad() Game.SetDynamicBlockTranslation("Block0", 10, 1, 1500, 0, 0) return true end
Exemple de com convertir una funció MoveBlock en una funció Translation. (mira a continuació):
function Tick() Game.MoveBlock("Block0", 0.5,0) return true end
Block0 es mou tota l'estona cap a la dreta: 0.5px cada 1/100s Així que es mou a una velocitat de 300m/60s
function OnLoad() Game.SetDynamicBlockTranslation("Block0", 300, 0, 12000, 0, 6000) return true end
Aquesta es la funció MoveBlock en la versió de Translation. Es mou 300m a la dreta i 300m de tornada a l'esquerre durant 12000ms. endTime esta a 12000/2=6000, així que el moviment parara tan aviat com Block0 sigui a (300,0)
SetDynamicBlockNone(block)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funció elimina totes les animacions aplicades a un bloc. El bloc ha de ser dinàmic (modifica el nivell per aconseguir <position x="0" y="0" dynamic="true" />).
Exemple d'Script
En l'exemple, el bloc es mourà fins que el jugador premi la tecla S.
function OnLoad() Game.SetDynamicBlockTranslation("Block0", 10, 1, 1500, 0, 0) Game.SetKeyHook("S", "StopAnimation") return true end function StopAnimation() Game.SetDynamicBlockNone("Block0") end
CameraZoom(z)
[require Xmoto >= 0.2.0]
Explicació
En alguns nivells, podries necessitar que la càmera estigues mes lluny respecte al jugador. Utilitza aquesta funció per canviar el zoom de la càmera.
Exemple d'Script
L'exemple mostra com un zoom diferent es pot utilitzar per a jugar en el nivell.
function OnLoad() Game.CameraZoom(-0.05) return true end
CameraMove(x, y)
[require Xmoto >= 0.2.0]
Explicació
Per algun nivells concrets, potser vols moure la càmera. Utilitza aquesta funció per fer-ho.
Exemple d'Script
L'exemple mostra com enfocar una altre part del nivell d'on es troba el jugador.
function OnLoad() Game.CameraMove(0, 3) return true end
GetEntityRadius(entity)
[require Xmoto >= 0.2.0]
Explicació
Retorna el radi d'una figura. Aquest radi s'utilitza per a les col·lisions. Pots utilitzar-lo per les teves pròpies col·lisions o per alguna altre cosa.
Exemple d'Script
L'exemple et mostra el radi d'una maduixa.
function OnLoad() Game.Message("Radius of the strawberry : "..Game.GetEntityRadius("Strawberry0")) return true end
IsEntityTouched(entity)
[require Xmoto >= 0.2.0]
Explicació
Aquesta funció es anomenada quan una figura es tocada. Peró alguns cops pots voler saber quan una figura no es tocada. Utilitza aquesta funció.
Exemple d'Script
L'exemple mostra com fer una acció quan el jugador no esta tocant una figura.
g = -9.81 function OnLoad() Game.Message("Gravity is increasing while you are not touching the snowman") return true end function Tick() if(Game.IsEntityTouched("SnowMan0") == 0) then g = g - 0.03 Game.SetGravity(0, g); end return true end
KillPlayer()
[require Xmoto >= 0.2.1]
Explicació
Si anomenes aquesta funció, el jugador morira. Es interessant si vols que el jugador mori en tocar un enemic. per exemple.
Exemple d'Script
En el següent exemple, el jugador mor quan entri en una zona.
Zone0 = {} function Zone0.OnEnter() Game.KillPlayer() end
KillEntity(entityID)
[require Xmoto >= 0.2.1]
Explicació
Si anomenes aquesta funció, s'eliminara la figura entityID. La figura pot ser una maduixa o qualsevol altre.
Exemple d'Script
En el següent exemple, s'elimina una maduixa quan el jugador entra en la zona Zone0.
Zone0 = {} function Zone0.OnEnter() Game.KillEntity("Strawberry0") end
WinPlayer()
[require Xmoto >= 0.2.1]
Explicació
Si anomenes aquesta funció, el jugador guanyara el joc (fins i tot si queden maduixes pendents).
Exemple d'Script
En el següent exemple, el jugador guanya quan entra en la zona Zone0.
Zone0 = {} function Zone0.OnEnter() Game.WinPlayer() end
RemainingStrawberries()
[require Xmoto >= 0.2.1]
Explicació
Aquesta funció retorna el numero de maduixes pendents en el nivell.
Exemple d'Script
En el següent exemple, quan el jugador entra en la zona Zone0, el numero de maduixes pendents es mostra per pantalla.
Zone0 = {} function Zone0.OnEnter() Game.Message(Game.RemainingStrawberries()) end