miércoles, 12 de octubre de 2011

Nuestro primer Script

Como hemos comentado, un script debe estar dentro de un objeto, aunque puede crearse directamente a través de la opción [Script nuevo] desde la ventana de Inventario.
Si en esta ventana presionamos el botón [+] nos dará la posibilidad de crear un Script simplemente presionando en esa línea.
Tras ello el script aparecerá en nuestro inventario precisamente con el nombre Script Nuevo, aunque dependiendo del visor o la configuración que éste tenga, podrá aparecer con el nombre en inglés New script.
Nota:
Dado que al final, para poder aprovechar plenamente las nuevas funcionalidades todo los usuarios estarán abocado a utilizar los visores tipo 2 ó 3, en los ejemplos gráficos, trataré de utilizar ese tipo de visores, aunque a mí no terminan de convencerme.
Reconozco que éste es simplemente un punto de vista totalmente personal.



Prosigamos con el experimento... si hemos creado un nuevo script, podemos editarlo, aunque por el momento, sólo analizaremos su estructura.

Para poder ver el contenido del script bastará con hacer un doble clic sobre su nombre y se abrirá la ventana de edición.
En la izquierda de la ventana aparecen los numeros de línea, números que no están incluídos en el propio código, sirviendo sólo como guía para el scripter (scripter es el nombre con el que se suele denominar a los programadores en SL)
Podemos ver que en la línea 0 aparece la palabra default
Los scripts funcionan como máquinas de estado, lo que más o menos quiere decir que el script puede estar en distintos estados y dependiendo del estado en el que esté se ejecutara un código u otro.
No adelantemos acontecimientos, nos debe bastar saber que un script puede tener distintos estados y que cualquier script tiene al menos un estado llamado default, o estado por defecto.
Podemos ver que en la línea 1 se abre una llave {, llave que veremos se cierra en la línea 11.
Lo que aparece entre la llave  de la línea 1 y la llave  de la línea 11 es el código que se corresponde al estado default .
A algunos sorprenderá que las líneas comiencen con el nº 0. Ésto es algo muy habitual en los lenguajes de programación, el primer elemento de un conjunto de elementos suele ser el elemento nº 0.

Sintaxis del lenguaje
Los que tengan experiencia con lenguajes como C++, C#, Java o JavaScript, se habrán percatado que la sintaxis de LSL les resulta familiar.

Principios básicos:
Al contrario que otros lenguajes, como Visual Basic, el código es sensible a mayúsculas y minúsculas, esto significa que el término miVariable es diferente al término MiVariable.
Las  variables, constantes y procedimientos que no estén definidos en el propio entorno de desarrollo deben ser declarados.
Aunque esto lo desarrollaremos en un punto posterior, diré que para declarar una variable, constante o función se pone delante el tipo al que pertenece o devuelve.
Debo apuntar que a la hora de declarar una variable puede asignarsele no solo el tipo, sino también un valor inicial.
Estos podrían ser ejemplos de declaraciones:
   
    integer variableEntera;
    string   nombreDelObjeto = "Artefacto";
    vector  dimensionesDelObjeto; 
    string nombreDelpropietario(key UUID)
    {
       // Líneas de código
    }

Una linea de código finaliza con un punto y coma
Esto último es aplicable tanto a las líneas donde se declaran elementos como a las líneas donde se asignan  o se realizan llamadas a procedimientos. No os preocupeis por esto, iremos viéndolo poco a poco.
Podemos hacer que una línea sea un simple comentario, para ello pondremos al principio de la misma dos barras inclinadas, en el ejemplo podemos ver la línea comentada
       // Líneas de código
Los procedimientos, funciones, flujos de bucle, manejadores de eventos, y estados suelen empezar con una llave abierta { y acabar con una llave cerrada }
Comprobémoslo en el código anterior.
Tenemos el estado default que engloba todo lo que hay entre sus dos llaves, es decir, el manejador del evento state_entry y el manejador del evento touch_start

A título de información un evento es el aviso, algo que se genera cuando suceden determinadas cosas.
Aunque sea adelantar tema, diré que cuando un script se sitúa en un determinado estado, se produce el evento state_entry y cuando sale de ese estado se produce el evento state_exit, igualmente cuando inciamos un toque con el cursor del ratón sobre un objeto, se produce el evento touch_start, a continuación se produce el evento touch y al dejar de tocarlo se produce el evento touch_end.
Podemos escribir código para manejar cada uno de estos eventos.
Como he apuntado, en el código que nos atañe, generado automáticamente al crear un script, tenemos un manejador para los eventos state_entry y touch_start
todo lo anterior tomadlo como una información complementaria.
¿Qué hace este código?
Observad que al crear un nuevo script lo primero que vemos es un mensaje en el chat normal
Este mensaje muestra en pantalla
    Hello, Avatar
Esto es responsabilidad de la línea 4, que pertenece al manejador del evento state_entry
Cuando se termina de crear un evento directamente el script  entra en el estado default y por tanto dispara el evento  state_entry del estado default como este script contiene un manejador para este evento se ejecutará su parte de código de forma inmediata.

La línea completa es
     llSay(0, "Hello, Avatar!");

La forma como se usa es:

  llSay(Número de canal, Mensaje de texto);

llSay es una función suministrada por el entorno, cuando se ejecuta envía un mensaje a través del número de canal de chat que se especifique.
En SL hay una gran cantidad de canales. Se puede especificar el canal por el que se envía el mensaje utilizando un número entero de forma que
  • Si se usa el canal 0, como en el ejemplo, el mensaje aparecerá en el chat normal de texto
  • Se puede usar un número negativo teniendo en cuenta que los números negativos de canal se suelen utilizar para comunicaciones entre objetos
En la línea 9 tenemos el siguiente código:
     llSay(0, "Touched");
Esta línea se ejecutará cuando se comienza a tocar con el ratón el objeto.

Hemos partido de la base de que creamos el script desde el inventario, pero también podemos crearlo desde el mismo objeto.
Para ello nos iremos a una parcela que nos permita crear prims, y en ella lo crearemos.
El tipo de prim por el momento no tiene importancia. Yo he creado una esfera.
Una vez creado, seleccionamos el prim, pulsamos con el boton derecho del raton y hacemos clic sobre la opción Editar.
A continuación seleccionamos la pestaña [Contenido] y pulsamos en ella el botón [Script nuevo]
Con esto habremos creado un script dentro del propio objeto.
En vez de esto, podríamos haber arrastrado el script que tenemos en el inventario hasta la carpeta contenido del prim. El efecto hubiese sido el mismo.
De una u otra manera tendremos un script en la pestaña contenido del prim o podriamos decir tambien en el inventario del prim.
Podemos ver el código de este script creado simplemente haciendo un doble clic en su nombre, con lo que se nos abrirá el editor.
Podemos salir del modo edición del prim y hacer clic en el objeto.
Nos mostrará en el chat el mensaje Touched.
En este caso se muestran dos mensajes, el primero se ha producido al crear el script y el segundo al pulsar sobre el objeto.
Podeis observar que los mensajes emitidos por objetos tienen un color verdoso, frente a los mensajes de los avatares que suelen tener un color blanco.
Vemos que se muestra el nombre del objeto, en este caso como no lo hemos modificado aparece su nombre por defecto. Voy a cambiar el nombre del prim y ponerle Primer prim con codigo
Al hacer clic el mensaje cambia también el nombre del objeto emisor


 Modificación del código
Volvemos a editar el prim, vamos a la pestaña contenido y hacemos doble clic sobre el script
Una vez abierto, podemos modificar las líneas de código para adaptarlo a nuestras necesidades.
supongamos que no queremos que los mensajes aparezcan en inglés y que deseamos traducirlos.
Sería tan sencillo como cambiar su texto por el siguiente:
     default
     {
         state_entry()
         {
             llSay(0, "¡Hola, Avatar!");
         }

         touch_start(integer total_number)
         {
             llSay(0, "Tocado.");
         }
     }


Con este sencillo cambio habremos conseguido que los mensajes generados por el objeto aparezcan en español

En esta entrada hemos aprendido los elementos más básicos del lenguaje LSL para la creación de scripts.
Seguramente a lectores avezados les habrá parecido de una simplicidad insufrible, pero deben tener en cuenta que pueden conectarse e¡lectores sin ninguna experiencia, y a veces algo tan simple como crear un script sin que te indiquen cómo hacerlo, puede representar un problema.
Mi intención es avanzar en las entregas posteriores a una velocidad mayor y tratar de dominar incluso las funciones y estructuras más complejas.
Espero que estas entregas os resulten útiles, por mi parte me comprometo a conseguir un tutorial completo y claro, con el objetivo de que sea accesible al máximo número posible de personas.

No hay comentarios:

Publicar un comentario