Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Mover y cambiar el tamaño de las Zonas
Kenobi-LJN
2
Introducción. ¿Por qué usar LUA?
Aspecto de una zona en LUA Las funciones de LUA específicas para zonas El OriginalPoint, la clave Creando zonas matemáticamente (cuadrado) Generando cualquier polígono regular (usando bucles) Mover una zona Girar una zona no regular (y ya que estamos, escalarla) Hacer que una zona siga una trayectoria fija Hacer que una zona persiga al jugador Generar zonas alrededor del jugador Generar zonas al vuelo Usar una librería externa
3
1. Introducción. ¿Por qué usar LUA?
En Urwigo no podemos modificar todas las propiedades de una clase. Lua tiene funciones epecíficas. Lua trabaja con el identificador, no con el nombre, por lo que cada objeto ha de ser identificado.
4
1. Introducción. ¿Por qué usar LUA?
Ha de ser único. Case sensitive (como todo en Lua). No puede incluir espacios. No puede empezar con un número. No se aceptan caracteres con acentos ni guiones (-), pero sí guiones bajos (_).
5
2. Aspecto de una zona en Lua
Estamos familiarizados con el entorno gráfico de Urwigo, pero… ¿qué aspecto tiene una zona en LUA? Podemos compilar un .gwz con un cartucho de prueba, del cual extraeremos el código LUA para aprender qué aspecto tiene una zona.
6
2. Aspecto de una zona en Lua
7
3. Las funciones de LUA específicas para zonas
Wherigo.VectorToZone(punto, zona) Devuelve la distancia y rumbo de un punto a una zona. Wherigo.VectorToSegment(punto, extremo1, extremo2) Devuelve la distancia y rumbo de un punto a un segmento definido por sus dos extremos. Wherigo.IsPointInZone(punto, zona) Devuelve true o false si el punto está o no en la zona. Wherigo.VectorToPoint(punto1, punto2) Devuelve la distancia y rumbo desde punto1 a punto2. Wherigo.Distance(valor, ‘unidades’) Transforma un valor en objeto distancia (con unidades). Wherigo.TranslatePoint(punto, distancia, rumbo) Devuelve las coordenadas de un punto tras moverlo una distancia según un rumbo.
8
4. El OriginalPoint, la clave
El OriginalPoint de una zona es el centro geométrico de la misma. En Urwigo se genera automáticamente tras definir los puntos de zona, pero no puede modificarse. Con LUA podemos modificarlo, moverlo, y generar puntos de zona a su alrededor.
9
5. Creando zonas matemáticamente (cuadrado)
Funciones escritas en: View > Lua user functions Las llamaremos con una caja de “Lua user code” en cualquier parte de nuestros árboles de código.
10
5. Creando zonas matemáticamente (cuadrado)
11
6. Generando cualquier polígono regular (usando bucles)
12
6. Generando cualquier polígono regular (usando bucles)
For i=1, numeroLados, 1 do Un bucle for realiza el código entre la línea for y la línea end, un cierto número de veces. Ese número de veces viene determinado por i. En nuestro caso, i empieza en 1, termina en numeroLados, y cuenta de 1 en 1. Orientacion+((360/numeroLados)·i) En el caso del cuadrado sabíamos que cada vértice está girado 90º (360/4). Para un polígono genérico, el giro de cada vértice viene determinado por 360/numeroLados.
13
6. Generando cualquier polígono regular (usando bucles)
14
7. Mover una zona O bien movemos la zona completa punto a punto…
Esto es útil para zonas no regulares o dibujadas a mano. El problema que tiene es que a priori no sabremos cuántos puntos tendrá la zona que queremos mover. Podemos solucionarlo haciendo uso de la función interna table.getn(array), que cuenta el número de elementos de un array (en nuestro caso, el array zona.Points) O bien movemos el OriginalPoint y regeneramos la zona a su alrededor. Esto nos es útil para zonas geométricas regulares según las circunstancias.
15
7. Mover una zona
16
8. Girar una zona no regular (y ya que estamos, escalarla)
Regeneraremos la zona desde el OriginalPoint, añadiendo un giro. Según vimos en el capítulo 3, 5 y 6, Wherigo.TranslatePoint necesita una distancia y un rumbo desde el OriginalPoint a cada punto de zona. En una zona geométrica, la distancia era un parámetro y el rumbo conocido (determinado por 360/numeroLados). Para una zona no regular, dibujada a mano, tenemos que obtener el rumbo y distancia desde el OriginalPoint a todos y cada uno de los puntos de la zona. Usaremos Wherigo.VectorToPoint.
17
8. Girar una zona no regular (y ya que estamos, escalarla)
*Hemos usado un parámetro factor multiplicado a distancias[i] para que esta función también sirva para cambiar el tamaño de zona.
18
8. Girar una zona no regular (y ya que estamos, escalarla)
19
9. Hacer que una zona siga una trayectoria fija
La trayectoria será el contorno de otra zona. Cada punto de dicha zona serán los pasos de la zona móvil, por lo que conviene hacerlos equidistantes. En el evento que desencadene el movimiento (por ejemplo “on elapse” de un timer de tipo “interval”), obtendremos los rumbos y distancias desde el OriginalPoint de la zona móvil al siguiente puto de ruta. En cada paso, sumaremos 1 a una variable global. Si dicha variable global sobrepasa el número de puntos de ruta, la reiniciamos a 1 (para dar otra vuelta). Por último, movemos la zona entera con la función comentada en el capítulo 7.
20
9. Hacer que una zona siga una trayectoria fija
* Si la zona móvil fuera geométrica, bastaría con igualar su OriginalPoint a cada punto de ruta y generarla desde allí.
21
9. Hacer que una zona siga una trayectoria fija
22
10. Hacer que una zona persiga al jugador
Podríamos usar un timer “interval” para llamar al movimiento. Obtendríamos el rumbo que tiene que seguir la zona móvil hacia el jugador con Wherigo.VectorToPoint(zonaMovil, Player.ObjectLocation). Después, llamaríamos a una función para mover zonas como la del capítulo 7, pasando como parámetro el rumbo obtenido en el anterior punto. La velocidad de la zona iría determinada por la duración del timer y el parámetro distancia en la función de movimiento.
23
11. Generar zonas alrededor del jugador
Para zonas geométricas regulares, podríamos usar una función como MOVER_CENTRO_ZONA del capítulo 7, con cuidado de usar como origen del movimiento el Player.ObjectLocation, y luego generarla con la función del capítulo 6.
24
11. Generar zonas alrededor del jugador
25
12. Generar zonas al vuelo Puede ser interesante generar zonas que no han sido definidas previamente en Urwigo. Por ejemplo, un cartucho basado en un laberinto, en el que el jugador puede hacer marcas para saber los pasillos por los que ha pasado. Las marcas se hacen al vuelo, porque a priori el programador no sabe el número de marcas que hará el jugador, por lo que no puede preparar las zonas en Urwigo. Haríamos uso de una variable global que iríamos aumentando en 1 por cada zona generada, para llevar la cuenta. El nombre de cada zona se concatena con esta función para obtener “Zona 1”, “Zona 2”, etc. Haríamos uso del constructor que vimos en el capítulo 2.
26
12. Generar zonas al vuelo
27
13. Usar una librería externa
Podemos escribir nuestras funciones genéricas en un archivo .lua, por ejemplo libreriaZonas.lua que dejaremos en la carpeta de nuestros proyectos. Así, podemos usar las funciones en cualquier proyecto que queramos sin escribirlas otra vez.
28
Y eso es todo… ¡Muchas gracias!
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.