He desarrollado una libreria fisica muy simple que calcula movimientos parabolicos y tambien movimientos ondulares, tambien hay un pequeño detector de colisiones, aunque aun no funciona muy bien.

Funciones:

newObject(Xo,Yo,Vox,Voy,faseo)

Tipo: Array
Funcion: Crea un objeto y lo almacena en una variable, su temporizador comienza a contar, para pararlo se usa oData(Name)[1].T:stop()
Sintaxis: Xo => Posicion inicial en eje X
Yo => Posicion inicial en eje Y
Vox => Velocidad inicial en eje X
Voy => Velocidad inicial en eje Y
faseo => Fase inicial, para movimientos ondulatorios.
Ejem: Caja = newObject(20,35,50,60,0)



oData(Name)

Tipo: Array
Funcion: Proporciona una informacion determinada sobre el objeto especificado en funcion del tiempo almacenado en su temporizador.
Sintaxis: Name => Nombre del objeto, previamente creado con newObject()

oData(Name)[1].X => [Numero real] Proporciona la actual posicion del objeto en el eje X
oData(Name)[1].Y => [Numero real] Proporciona la actual posicion del objeto en el eje Y
oData(Name)[1].T => [Temporizador] Contiene el temporizador del objeto, util para realizar acciones como oData(Name)[1].T:stop() que para el movimiento del objeto
oData(Name)[1].times => [Numero real] Proporciona el tiempo actual del objeto desde que inicio su movimiento

Ejem: Posicion X = oData(Caja)[1].X



oShake(Name,Yo,Amp,Freq)

Tipo: Array
Funcion: Proporciona una informacion determinada y se le suma una unidad (especificada en Freq) a la reiniciar la fase se puede asignar el valor a Name[3].fase.
Sintaxis: Name => Variable que contiene el objeto
Yo => Posicion inicial, punto sobre el que se realizara el movimiento ondulatorio
Amp => Amplitud del movimiento
Freq => Frequencia del movimiento

oShake(Name,Yo,Amp,Freq) [1].Y => Especifica la posicion Y (que puede ser usada para el eje X)
oShake(Name,Yo,Amp,Freq)[1].fase => Especifica la fase.



oCollision(Name,AreaXo,AreaYo,AreaX,AreaY,width,height)

Tipo: Boolean
Funcion: Nos dice si un objeto determinado esta dentro de una area especificada.
Sintaxis: Name => Variable que almacena el objeto
AreaXo => Posicion inicial X del area.
AreaYo => Posicion inicial Y del area.
AreaX => Posicion final X del area.
AreaY => Posicion final Y del area.
width = anchura del objeto.
height = altura del objeto.
Ejem: oCollision(Caja,440,242,480,272,10,10)

Tutorial: Capítulo 1  

Publicado por Wonderman Compartir!

Creacion de colores: en LUA se pueden crear colores usando la funcion Color.new(R,G,B), poniendo los valores de Red (Rojo), Green (Verde) y Blue (Azul) que forman el color y que tienen valores desde 0 (Color minimo) hasta 255 (Color maximo), por ejemplo rojo = Color.new(255,0,0) (el maximo del color rojo y el minimo de los otros 2) . Nota: podemos usar el Paint para saber los valores del color que queramos [Abrimos Paint >> Colores >> Modificar colores... >> Definir colores personalizados >>], hay nos aparecera una paleta de colores y abajo sus valores RGB. Bien, los colores se almacenan en variables, por ejemplo: blanco = Color.new(255,255,255). Para los mas nuevos, una variable es como un contenedor que esta en la memoria y que almacena un dato, que puede ser un numero o otro tipo de dato, y que se define con un identificador que se recomienda que sea una palabra que nos sirva para recordar, por ejemplo, miedad = 18. Por lo demas, no hay mucho mas que saber sobre el manejo de los colores.

Mostrar texto en pantalla: antes de explicar la funcion screen:print() que sirve para imprimir texto en la pantalla, hay que entender algunos conceptos previos, en LUA todo programa necesita tener un bucle principal para funcionar, que se define asi:

while true do

... instrucciones ...
... instrucciones ...
... instrucciones ...

end

- Asi, todo lo que pongamos dentro del bucle principal (entre el while true do y el end) se repetira eternamente, a menos que usemos la funcion break, pero eso lo veremos mas adelante. Ademas si queremos que se muestre texto o otros objetos por la pantalla el bucle debera contener las funciones:

screen:waitVblankStart()
screen:flip()

- No hace falta saber como funcionan estas funciones, tan solo que se deben poner dentro del bucle principal, generalmente al final, como ultima instruccion. Bien, otra funcion util es screen:clear(), que lo que hace es limpiar la pantalla de todo lo que se mostraba en ella. LUA PSP funciona a unos 60 frames por segundo, esto es, el bucle principal se repite 60 veces en un segundo. Si no usamos screen:clear(), la pantalla que se imprimio en el ultimo bucle se queda y en el siguiente bucle se imprime sobre esta. Esto es perceptible cuando hay imagenes en movimiento, por ejemplo, si imprimo en la pantalla la palabra "Hola mundo" en la posicion (10,10) y en el siguiente bucle se imprime en la posicion (10,20), se mostraran 2 "Hola mundo", si usara screen:clear() solo se mostraria el ultimo. Si no lo entiendes ahora, tranquilo, ya lo entendera con la practica. Bien, vayamos a la funcion screen:print(X,Y,"Texto",Color), X y Y son las coordenadas de la pantalla de la PSP, que tiene unas dimensiones de 480x272, 480 pixeles de largo y 272 de largo, asi la posicion (0,0) es la esquina superior izquierda de la pantalla, y la posicion (480,272) es la esquina inferior derecha.


Lo que queremos imprimir lo tenemos que poner entre comillas, y por ultimo, el color del texto, creado anteriormente. Por ejemplo: screen:print(10,10,"Hola mundo",blanco)

Bien, con todo lo explicado, ya somos de capaces de crear nuestro primer programa ( '--' el doble guion se utiliza en LUA para poner comentarios, muy utiles en los programas muy largos, que generalmente se utilizan para recordar que hace una parte del programa)

blanco = Color.new(255,255,255)
--Creamos el color blanco

while true do
--Comienza el bucle principal, todas las instrucciones a partir de aqui hasta el 'end' se repetiran indefinidamente

screen:clear()
--Se limpia la pantalla, se borra todo lo que havia imprimido en la pantalla

screen:print(10,10,"Hola mundo",blanco)
--Se imprime en la pantalla el texto Hola mundo en la posicion (10,10) y de color blanco

screen:waitVblankStart()
screen:flip()
--Funciones necesarias para mostrar graficos en pantalla
end

Resultado:


Bienvenid@  

Publicado por Wonderman Compartir!

Blog en el que ire publicando informaciones relacionadas con el scriptting de LUA en PSP. Tambien publicare los scripts que vaya desarrollando