Difference between revisions of "Es:Scripted levels"

From X-Moto
Jump to: navigation, search
Line 663: Line 663:
 
   Game.CameraMove(0, 3)
 
   Game.CameraMove(0, 3)
 
   return true
 
   return true
 +
end
 +
 +
== GetEntityRadius(entity) ==
 +
[require Xmoto >= 0.2.0]
 +
=== Explicación ===
 +
Retorna el radio de una figura. Este radio se utiliza para las colisiones. Puedes utilizarlo para tus propias colisiones o para otra cosa.
 +
 +
=== Ejemplo de Script ===
 +
El ejemplo te muestra el radio de una fresa.
 +
 +
function OnLoad()
 +
  Game.Message("Radius of the strawberry : "..Game.GetEntityRadius("Strawberry0"))
 +
  return true
 +
end
 +
 +
== IsEntityTouched(entity) ==
 +
[require Xmoto >= 0.2.0]
 +
=== Explicación ===
 +
Esta función es llamada cuando una figura es tocada. Pero algunas vezes puede querer saber cuando una figura no es tocada. Utiliza esta función.
 +
 +
=== Ejemplo de Script ===
 +
El ejemplo muestra como hacer una acción cuando el jugador no esta tocando 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ón ===
 +
Si llamas a esta función, el jugador morira. Es interesante si quieres que el jugador muera en tocar un enemigo, por ejemplo.
 +
 +
=== Ejemplo de Script ===
 +
En el siguiente ejemplo, el jugador muere cuando entra en una zona.
 +
 +
Zone0 = {}
 +
 +
function Zone0.OnEnter()
 +
  Game.KillPlayer()
 +
end
 +
 +
== KillEntity(entityID) ==
 +
[require Xmoto >= 0.2.1]
 +
=== Explicación ===
 +
Si llamas a esta función, se eliminara la figura entityID. La figura puede ser una fresa o cualquier otra.
 +
 +
=== Ejemplo de Script ===
 +
En el siguiente ejemplo, se elimina una fresa cuando el jugador entra en la zona Zone0.
 +
 +
Zone0 = {}
 +
 +
function Zone0.OnEnter()
 +
  Game.KillEntity("Strawberry0")
 +
end
 +
 +
== WinPlayer() ==
 +
[require Xmoto >= 0.2.1]
 +
=== Explicación ===
 +
Si llamas a esta función, el jugador ganara la partida (incluso si quedan fresas pendientes).
 +
 +
=== Ejemplo de Script ===
 +
En el siguiente ejemplo, el jugador gana cuando entra en la zona Zone0.
 +
 +
Zone0 = {}
 +
 +
function Zone0.OnEnter()
 +
  Game.WinPlayer()
 +
end
 +
 +
== RemainingStrawberries() ==
 +
[require Xmoto >= 0.2.1]
 +
=== Explicación ===
 +
Esta función retorna el numero de fresas pendientes en el nivel.
 +
 +
=== Ejemplo de Script ===
 +
En el siguiente ejemplo, cuando el jugador entra en la zona Zone0, el numero de fresas pendientes se muestra por pantalla.
 +
 +
Zone0 = {}
 +
 +
function Zone0.OnEnter()
 +
  Game.Message(Game.RemainingStrawberries())
 
  end
 
  end

Revision as of 01:34, 14 November 2006

English - Català

Contents

Introducción

Los Scripts hacen que un nivel sea dinámico. Puedes cambiar algunas propiedades físicas, mover objetos, modificar la lógica del juego, etc. Un script está hecho con el lenguaje Lua y se puede añadir al archivo del nivel.

La documentación sobre el lenguaje Lua la puedes encontrar aquí:
http://www.lua.org/manual/5.1/

Para hacer un script, has de saber al menos un poco sobre el archivo de nivel. Es un archivo XML. Incluye propiedades como el nombre del nivel, su descripción ... Además, incluye las definiciones de los bloques y las figuras. Un bloque se compone por vértices que son puntos unidos para formar un polígono.

Para presentar la forma de escribir un script, lo siguiente es un nivel básico que utilizaremos de ejemplo:

<?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>

Este nivel se puede hacer fácilmente con el xmoto-edit. Incluye un bloque llamado Block0 que es un cuadrado, una fresa llamada Strawberry0 y una zona llamada Zone0. Una zona es una parte invisible del nivel que hará que se ejecuten acciones cuando el jugador esté a dentro.

Algunas funciones requieren una mínima versión del xmoto para funcionar. Si haces servir alguna de estas funciones, por favor, pon esta información en le archivo del nivel. Por ejemplo, para hacer que tu nivel requiera el X-Moto 0.2.0, añade esta linea al código de tu nivel:

<level id="tutscript" rversion="0.2.0">

Scripted level.jpg

Todo el código del script es lenguaje Lua. Puedes encontrar la sintaxis aquí. De todas maneras, si escoges incluir el script dentro de un archivo XML, los símbolos < y > se han de reemplazar con &lt; y &gt;. El código del script se puede añadir entre <script> y </script> dentro de archivo de nivel.

Funciones llamadas por el X-Moto

OnLoad()

Explicación

Est función es llamada una vez al inicio del nivel. Has de retornar true si nada malo sucede.

Ejemplo de Script

El ejemplo muestra un mensaje al inicio del nivel.

function OnLoad()
  Game.Message("This level is scripted")
  return true
end

Tick()

Explicación

Funcinó llamada una vez cada centésima de segundo. Has de retornar true si nada malo sucede.

Ejemplo de Script

Este ejemplo se iniciara con gravedad 0 ; después, irá incremendose con el tiempo. Como la gravedad de la tierra es 9.81, no habrá gravedad terrestre hasta alcanzar los 9.81 segundos. Fijate que en el X-Moto la gravedad vertical se ha de multiplicar por -1 porqué las coordenadas de la pantalla están invertidas.

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ón

Esta función es llamada cuadno una figura (una fresa por ejemplo) es tocada. La figura se ha de declarar en el script. Fijate que el parámetro <size r> permite escoger el margen de la distancia que se considera para que una figura sea tocada.

Ejemplo de Script

El ejemplo muestra un mensaje cuando se toca una fresa.

Strawberry0 = {}

function Strawberry0.Touch()
  Game.Message("Nice strawberry !")
end

Zone.OnEnter()

Explicación

Esta función es llamada cuando el jugador entra en una zona.

Ejemplo de Script

El ejemplo muestra un mensaje cuando el jugador entra en la zona llamada Zone0.

Zone0 = {}

function Zone0.OnEnter()
  Game.Message("Entering in the zone")
end

Zone.OnLeave()

Explicació

Esta función es llamada cuando el jugador sale de una zona.

Ejemplo de Script

El ejemplo muestra un mensaje cuando el jugador sale de la zona llamada Zone0.

Zone0 = {}

function Zone0.OnLeave()
  Game.Message("Leaving the zone")
end

OnSomersault(bClockWise)

[require Xmoto >= 0.2.1]

Explicación

Esta función se llamada cada vez que el jugador hace una voltereta. Si bClockWise es 1 la voltereta sigue las agujas del reloj, si es 0 es al reves.

Ejemplo de Script

El ejemplo muestra un mensaje cuando el jugador have una voltereta.

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ón

Esta función es llamada cada vez que la rueda 1 toca la tierra o se detiene para tocarla. (el estatus es 1 si la rueda no estaba tocando la tierra y ahora si lo toca, y 0 para las demás situaciones)

Ejemplo dr Script

El ejemplo muestra la nueva máxima durada de un salto cada vez que es hace uno nuevo.

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

Funciones del X-Moto

GetTime()

Explicación

Retorna el tiempo transcurrido desde el inicio del nivel.

Ejemplo de Script

El ejemplo muestra un mensaje si el jugador tarda mas de 10 segundos 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ón

Muestra un mensaje en la pantalla. El mensaje se eliminara automáticamente después de 5 segundos. Puedes llamar a esta función unas cuantas vezes : los mensajes se mostraran todos.

Ejemplo de Script

El ejemplo muestra algunos mensajes al inicio del nivel.

function OnLoad()
  Game.Message("This level is scripted")
  Game.Message("GO GO GO !!!")
  return true
end

ClearMessages()

Explicació

Elimina los mensajes de la pantalla.

Ejemplo de Script

El ejemplo muestra como eliminar los mensajes de la pantalla y mostrar uno nuevo en algunas circunstancias.

Zone0 = {}

function Zone0.OnEnter()
  Game.ClearMessages()
  Game.Message("OnEnter")
end

function Zone0.OnLeave()
  Game.ClearMessages()
  Game.Message("OnLeave")
end

SetGravity(x, y)

Explicación

Cambia la gravedad en el juego (horizontal y vertical).

Ejemplo de Script

El ejemplo muestra como invertir la gravedad. Fijate que en el X-Moto, la gravedad se ha de multiplicar por -1, porque las coordinadas de la pantalla estan invertidas en la dirección y.

function OnLoad()
  Game.SetGravity(0, 9.81)
  return true
end

GetGravity()

Explicación

Retorna el par (gravedad horitzontal, y gravedad vertical).

Ejemplo de Script

El ejemplo muestra el viento y la gravedad al inicio del nivel.

function OnLoad()
  x, y = Game.GetGravity()
  Game.Message("Wind : "..x)
  Game.Message("Gravity : "..(y*-1))
  return true
end

IsPlayerInZone(zone)

Explicación

Retorna treu si el jugador esta en la zona especificada.

Ejemplo de Scrpit

Este ejemplo es un poco mas complicado. Cuando el jugador entra en una zona, la gravedad baja poco a poco. Una vez el jugador sale de la zona, la gravedad vuelve a ser 9.81 gradualmente.

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ón

Especifica la posición y la dirección del jugador en el juego. bRight puede ser 0 o 1.

Ejemplo de Script

El ejemplo tele-transporta al jugador cada vez que entra en la zona.

Zone0 = {}

function Zone0.OnEnter()
  Game.SetPlayerPosition(5, 0, 1)
end

GetPlayerPosition()

Explicación

Retorna el trio (x, y, bRight) que da la posición del jugador en el juego.

Ejemplo de Script

Este ejemplo hace que el jugador no sea capaz de coger una fresa ;-)

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ón

Especifica la posición de una figura en las coordenadas (x, y) dentro del juego.

Ejemplo de Script

El ejemplo cambia la posición de una fresa cada segundo.

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ón

Retorna la posición de una figura dentro del juego.

Ejemplo de Script

El ejemplo muestra otra manera para mover una fresa.

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ón

Cuando el jugadpr aprete la "tecla" especificada, una funcion sera llamada.

Ejemplo de Script

El ejemplo muestra como cambiar la gravedad simplemente apretando 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ón

Retorna la tecla asociada a una acción. Las posibles acciones son Drive, Brake, PullBack, PushForward, ChangeDirection.

Ejemplo de Script

El ejemplo muestra por pantalla como conducir al principio del nivel.

function OnLoad()
  Game.Message("To drive, press "..Game.GetKeyByAction("Drive"))
  return true
end

Log(msgs)

Explicación

Registra un mensaje en el xmoto.log.

Ejemplo de Script

El ejemplo registra el mensaje "An error occured" al inicio del nivel.

function OnLoad()
  Game.Log("An error occured")
  return true
end

MoveBlock(block, x, y)

[require Xmoto >= 0.2.0]

Explicación

Esta función permite al X-Moto mover un bloque dentro de un nivel. El bloque ha de ser dinamico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />). Fijate que mover un bloque puede ser peligroso: comprueba que el jugador no quede dentro del bloque una vez lo hayas movido.

Ejemplo de Script

En el ejemplo, cuando el jugador pulsa la tecla M, el bloque se mueve hacia la derecha.

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ón

Esta función da el centro de un bloque relativo a la posición del bloque (y del nivel si el bloque se encuentra en la posición (0, 0)). El centro se utiliza para las funciones SetBlockPos(), GetBlockPos() y SetBlockRotation(). Esta función se utiliza generalmente en la función Load() porque no es logico volver a cambiar el centro (aun así puedes cambiarlo si quieres).

Ejemplo de Script

En el ejemplo, se especifica el centro de un bloque en el centro de un cuadrado. Entonces, cuando el jugador pulse M, el bloque se pondrá debajo 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ón

Esta función permite al X-Moto mover un bloque segun su centro dentro de un nivel. El bloque ha de ser dinàmico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />). Fijate que mover un bloque puede ser peligroso: comprueba que el jugador no quede dentro del bloque una vez lo hayas movido.

Ejemplo de Script

En el ejemplo, se especifica el centro de un bloque en el centro de un cuadrado. Entonces, cuando el jugador pulse M, el bloque se pondrá debajo 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ón

Esta funcion da la posición de un bloque dado. El bloque ha de ser dinamico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />).

Ejemplo de Script

El ejemplo muestra como utilizar esta función como una condición. Ahora, puedes mover el bloque debajo de la moto tan solo si juegas hacia la derecha.

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ón

Esta función hace rotar los bloques. El bloque ha de ser dinamico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />).

Ejemplo de Script

En el ejemplo, si el jugador deja apretada la tecla M, el bloque 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ón

Esta función indica a una figura hacer circulos durante un tiempo dado. La posición actual del radio donde se encuentra la figura en el circulo es en la posición initAngle (in rad). La figura hará un circulo calculado en centesimas. La animación empezará en startTime en centesimas y acabará en endTime en centesimas, así pues, la duración es endTime-startTime/100 segundos. Un endTime de 0 significa una animación infinita. Fijxate que puedes componer rotaciones y movimientos. Fijate también que un argumento negativo te permite cambiar el comportamiento de la animación. Por ejemplo, un periodo negativo hara rotar a la figura en el sentido contrario.

Ejemplo de Script

El ejemplo muestra como de facil es mover una fresa. L'InitAngle es -PI/2 porque la fresa esta en la parte baja de donde queremos que se mueva.

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ón

Esta función permite indicar a una figura que haga un movimento durant un tiempo dado. La longitut del movimento es fX en el eje X y fY en el eje Y. La figura hará el movimento en un tiempo calculado en centesimas/2. La animación empezara en startTime en centesimas y acabara en endTime en centesimas, así pues, la duración es endTime-startTime/100 segundos. Un endTime de 0 significa una animación infinita. Fijate que puedes componer rotaciones y movimentos. Fijate también que un argumento negativo te permite cambiar el comportamiento de la animación.

Ejemplo de Script

El ejemplo muestra la composición de unas animaciones.

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ón

Esta función elimina todas las animaciones aplicadas a una figura.

Ejemplo de Script

El ejemplo pide a una figura hacer un movimento en primer lugar y despues, hacer una rotación. Si el jugador pulsa la tecla S, la fresa se 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

SetDynamicBlockRotation(block, initAngle, radius, period, startTime, endTime)

[require Xmoto >= 0.2.0]

Explicación

Esta función permite indicar a un bloque hacer un circlulo durante un tiempo dado. La posición actual del radio donde se encuentra la figura en el circlulo es en la posición initAngle (in rad). El bloque ará un circulo calculado en centésimas. La animación empezara en startTime en centésimas y acabara en endTime en centésimas, así pues, la duración es endTime-startTime/100 segundos. Un endTime de 0 significa una animación infinita. Fijate que puedes componer rotaciones y movimientos. Fijate también que un argumento negativo te permite cambiar el comportamiento de la animación. Por ejemplo, un período negativo hará rotar a la figura en el sentido contrario. El bloque ha de ser dinámico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />). No muevas los bloque muy rápido, sinó la moto podria traspasar el bloque.

Ejemplo de Script

El ejemplo muestra como mover fácilmente un bloque.

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ón

Esta función permite indicar a un bloque hacer un movimento durante un tiempo dado. Un movimento es una secuéncia repetitiva de ida y vuelta entre dos puntos dados. La longitut del movimento es fX en el eje X y fY en el eje Y. La animación empezara en startTime en centésimas y acabara en endTime en centésimas, así pues, la duración es endTime-startTime/100 segundos. Un endTime de 0 significa una animación infinita. Fijate que puedes componer rotaciones y movimientos. El bloque ha de ser dinámico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />). No muevas los bloque muy rápido, sinó la moto podria traspasar el bloque.

entity: Define que figura se mueve
fX: Define donde del eje X la figura se mueve
fY: Define donde del eje Y la figura se mueve
period: Define, cuanto tardara la figura en volver al punto de origen
startTime: Define, cuando empezara el movimiento
endTime: Define, cuando finalizara el movimento Con el objectivo de hacer los archivos de repeticiones mas pequeños, deberias utilizar Translation en lugar de la función MoveBlock. Mas abajo hay un pequeño ejemplo sobre como convertir una función MoveBlock en una función Translation.

Ejemplo de Script

En el ejemplo, el bloque hace un movimento infinito : Se mueve desde el punto de origen (0,0) hasta (10,1) en 750ms, y retorna de nuevo 750ms.

function OnLoad()
  Game.SetDynamicBlockTranslation("Block0", 10, 1, 1500, 0, 0)
  return true
end

Ejemplo de como convertir una función MoveBlock en una función Translation. (mira a continuación):

function Tick()
Game.MoveBlock("Block0", 0.5,0)
return true
end

Block0 se mueve todo el rato hacia la derecha: 0.5px cada 1/100s Asi que se mueve a una velocidad de 300m/60s

function OnLoad()
Game.SetDynamicBlockTranslation("Block0", 300, 0, 12000, 0, 6000)
return true
end

Esta es la función MoveBlock en la versión de Translation. Se mueve 300m a la derecha y 300m de vuelta a la izquierda durante 12000ms. endTime esta a 12000/2=6000, así que el movimento parara tan pronto como Block0 este en (300,0)

SetDynamicBlockNone(block)

[require Xmoto >= 0.2.0]

Explicación

Esta función elimina todas las animaciones aplicadas a un bloque. El bloqur ha de ser dinámico (modifica el nivel para conseguir <position x="0" y="0" dynamic="true" />).

Ejemplo de Script

En el ejemplo, el bloque se movera hasta que el jugador pulse 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ón

En algunos niveles, podrias necesitar que la cámera esté mas lejos respecto al jugador. Utiliza esta función para cambiar el zoom de la cámera.

Ejemplo de Script

El ejemplo muestra como un zoom diferente se puede utilizar para jugar en el nivel.

function OnLoad()
  Game.CameraZoom(-0.05)
  return true
end

CameraMove(x, y)

[require Xmoto >= 0.2.0]

Explicación

Para algunos niveles concretos, quizas quieres mover la cámera. Utiliza esta función para hacerlo.

Ejemplo de Script

El ejemplo muestra como enfocar otra parte del nivel de donde se encuentra el jugador.

function OnLoad()
  Game.CameraMove(0, 3)
  return true
end

GetEntityRadius(entity)

[require Xmoto >= 0.2.0]

Explicación

Retorna el radio de una figura. Este radio se utiliza para las colisiones. Puedes utilizarlo para tus propias colisiones o para otra cosa.

Ejemplo de Script

El ejemplo te muestra el radio de una fresa.

function OnLoad()
  Game.Message("Radius of the strawberry : "..Game.GetEntityRadius("Strawberry0"))
  return true
end

IsEntityTouched(entity)

[require Xmoto >= 0.2.0]

Explicación

Esta función es llamada cuando una figura es tocada. Pero algunas vezes puede querer saber cuando una figura no es tocada. Utiliza esta función.

Ejemplo de Script

El ejemplo muestra como hacer una acción cuando el jugador no esta tocando 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ón

Si llamas a esta función, el jugador morira. Es interesante si quieres que el jugador muera en tocar un enemigo, por ejemplo.

Ejemplo de Script

En el siguiente ejemplo, el jugador muere cuando entra en una zona.

Zone0 = {}

function Zone0.OnEnter()
  Game.KillPlayer()
end

KillEntity(entityID)

[require Xmoto >= 0.2.1]

Explicación

Si llamas a esta función, se eliminara la figura entityID. La figura puede ser una fresa o cualquier otra.

Ejemplo de Script

En el siguiente ejemplo, se elimina una fresa cuando el jugador entra en la zona Zone0.

Zone0 = {}

function Zone0.OnEnter()
  Game.KillEntity("Strawberry0")
end

WinPlayer()

[require Xmoto >= 0.2.1]

Explicación

Si llamas a esta función, el jugador ganara la partida (incluso si quedan fresas pendientes).

Ejemplo de Script

En el siguiente ejemplo, el jugador gana cuando entra en la zona Zone0.

Zone0 = {}

function Zone0.OnEnter()
  Game.WinPlayer()
end

RemainingStrawberries()

[require Xmoto >= 0.2.1]

Explicación

Esta función retorna el numero de fresas pendientes en el nivel.

Ejemplo de Script

En el siguiente ejemplo, cuando el jugador entra en la zona Zone0, el numero de fresas pendientes se muestra por pantalla.

Zone0 = {}

function Zone0.OnEnter()
  Game.Message(Game.RemainingStrawberries())
end