Mv Lsl
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,716
On Slideshare
1,517
From Embeds
199
Number of Embeds
5

Actions

Shares
Downloads
13
Comments
0
Likes
0

Embeds 199

http://mundosintetico.wordpress.com 150
http://legolas.ei.uvigo.es 44
http://www.linkedin.com 2
https://www.linkedin.com 2
https://www.google.es 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. mundos virtuales Linden Scripting Language Susana Gómez departamento de informática universidad de Vigo
  • 2. LSL
    • Permite añadir comportamientos e interactividad a los objetos de SL.
    • Técnicamente se usará el LSL2, ya que el lenguaje añadido a LindenWorld en agosto de 2002 era LSL.
  • 3. Acceso al código
    • Seleccionar primitiva + tabla de contenido de la ventana Construir + botón Nuevo script  se abrirá la ventana de Editar script.
  • 4. analizando el código…
    • default : estado de programación de LSL que se ejecutará. Todo programa de LSL debe tener al menos un estado que tendrá esta etiqueta.
    • {} : encierran los agentes de acontecimientos de un estado.
      • state_entry : se dispara cada vez que se entra en el estado
      • touch_start : se dispara cuando el avatar hace clic sobre un objeto.
  • 5. analizando el código…
    • IISay : opción de biblioteca que permite que el objeto hable, como un avatar, en el canal que elija.
    • Ayuda:
      • http://www.lslwiki.net/lslwiki/wakka.php?wakka= HomePage
      • Situar el cursor sobre la palabra en la ventana de edición de código, esto abrirá una ventana de información
  • 6. Generalidades
    • Hasta que se guardan los cambios éstos sólo existen en el editor de texto y no en SL.
    • Se recomienda utilizar un editor de textos externo
      • http://www.lslwiki.net/lslwiki/wakka.php?wakka=AlternativeEditors
  • 7. Compilación, subida y ejecución
    • LSL se ejecuta a ambos lados a través de un simulador.
    • El simulador simula todo lo que hay en 16 acres de tierra virtual.
    • Mientras se manipula el texto del código el código real se compila en el simulador.
    • El compilador de LSL existe dentro del mismo SL.
  • 8. Compilación, subida y ejecución
    • Cuando un código correcto se compila genera un código de bytes (bytecode).
    • Se prevé un cambio en la forma de compilación en el futuro para mejorar la ejecución.
    • Cuando el código es compilado en un simulador ya puede ser ejecutado.
    • La ejecución es el proceso simple de comprobar si el código necesita hacer algo.
  • 9. generalidades
    • El proceso de trabajar sólo cuando se necesita es la clave de cómo está estructurado LSL y de cómo escribir los códigos de forma correcta.
      • Estado : colección de código entre las llaves que se abren y se cierran.
    • LSL es un lenguaje estático y muy tipificado.
  • 10. Las animaciones
    • Sw para crear animaciones fuera de SL:
      • Gratuitos: Avinator, Slat, DAZ Studio, Blender y Qavimator.
      • Comercial: Poser, Maya y Posemaker.
    • SL utiliza el formato de movimiento BVH .
  • 11. Los tipos
    • LSL soporta siete tipo diferentes que determinan la clase de datos que se pueden almacenar.
      • Integer : enteros entre -2.147.483.648 y 2.147.483.647
      • Float : números en coma flotante con siete cifras pueden se positivos o negativos
      • String : colección de caracteres, entre “”
  • 12. Los tipos
      • Vector : tres puntos de paso que representan los componentes X,Y y Z. Un vector se utiliza generalmente, como una posición, velocidad, aceleración o color.
      • List : como LSL no tiene matrices ni estructuras, las listas permiten almacenar las colecciones de datos. Todos los tipos se colocan en listas pero una lista no puede colocarse en una lista.
        • http://www.lslwiki.net/lslwiki/wakka.php?wakka=list
  • 13. Los tipos
      • Rotation : conjunto de cuatro números de paso que representan los componentes X, Y, Z y S de la rotación cuaternaria.
        • http://www.lslwiki.net/lslwiki/wakka.php?wakka=rotation
      • Key : los Universally Unique IDentifiern se utilizan para identificar muchos objetos en SL, las claves permiten utilizar el UUID sin tener que escribir un montón de código.
        • http://www.lslwiki.net/lslwiki/wakka.php?wakka=key
  • 14. Control de flujo
    • http://www.lslwiki.net/lslwiki/wakka.php?wakka=FlowControl
    • if (expression) {} else {}
    • while (expression) {}
    • do (expression) {}
    • for (i=1; i< 100, i++) {}
    • Hay dos mecanismos de control de flujo:
      • Transición de state
      • Comando return
  • 15. Tipos de operadores
    • Unarios : operadores aritméticos que modifican un valor.
    • Binario : operadores aritméticos de dos cifras que producen una tercera.
    • Booleanos : generan resultados True o 1 y False o 0.
    • A nivel de bytes : pueden componer un número entero.
    • Asignación : recogen el resultado de una expresión y le asignan una variable.
  • 16. Características
    • Comparte la sintaxis de C .
    • En LSL un paquete de código es cualquier código entre llaves con una función global.
    • El contexto define cuándo se pueden iniciar o usar, en LSL hay dos niveles: global y local.
  • 17. Funciones
    • Sus parámetros pasan por valor y soportan en retorno.
    • Funciones definidas por el usuario
      • http://www.lslwiki.net/lslwiki/wakka.php?wakka= UserDefinedFunction
    • Funciones de la biblioteca
      • http://www.lslwiki.net/lslwiki/wakka.php?wakka=
      • functions
  • 18. Conectarse al mundo
    • Chat : cómo hablar con el resto de usuarios
    • default
    • {
    • state_entry() {
    • llListen(0, &quot;&quot;, llGetOwner () , &quot;&quot;);
    • }
    • listen (integer channel, string name, key id, string message)
    • {
    • llSay(0, message);
    • }
    • }
  • 19. Conectarse al mundo
    • MI : decir algo a alguien que no esté en el radio de susurrar, decir o gritar o que el mensaje sea privado. Mensaje instantáneo que llega a cualquier sitio de SL pero tan sólo lo escucha el receptor. Se necesita saber el UUID del receptor.
      • llInstantMessage (key UUID, string message)
      • Si el residente está desconectado, se guardará hasta que se conecte de nuevo.
  • 20. Conectarse al mundo
    • Sensores : permiten obtener más información sobre los avatares y objetos que están cerca de un objeto.
    • default {
    • state_entry()
    • {
    • //Configura un sensor de repetición, que busca //avatares en un radio de 20 metros a la redonda.
    • llSensorRepeat (&quot;“, &quot;“, AGENT, 20.0, PI, 1.0);
  • 21.
    • //El sensor devuelve los primeros 16 objetos detectados
    • sensor(integer detected)
    • {
    • // Nombra a todo el que detecta el sensor for(i=0;i<detected;i++)
    • {
    • llSay(0, llDetectedName(i) );
    • }
  • 22. Conectarse al mundo
    • Pagar : los códigos también pueden dar y recibir L$.
    • Para que otros acepten dinero, el código debe tener un acontecimiento llamado money .
    • default {
    • money(key giver, integer amount)
    • {
    • llSay(0, &quot;Gracias por la donación de&quot; * + (string)amount + &quot;L$&quot;);
    • }
    • }
  • 23.
    • Dar dinero por medio de un código necesita pedir permiso al propietario del objeto para poder cargar la deuda de L$ en su cuenta.
    • default {
    • state entry()
    • {
    • llRequestPermissions (llGetOwner(), PER-MISSION_DEBIT);
    • }
    • touch_start(integer number_touching)
    • {
    • llGiveMoney (HDetectedKey (0) , 1) ;
    • }
    • } // da 1 L$ a cualquiera que haga clic sobre el obj que está utilizando llGiveMoney, no funciona si el propietario deniega el permiso
  • 24. Conectarse al mundo
    • Inventario : el código puede coger, sacar o usar el código.
    • default {
    • state_entry()
    • {
    • //Permite que cualquiera se deje caer por su inventario
    • llAllowInventoryDrop (TRUE);
    •   touch_start(integer number_touched)
    • //Sólo el propietario puede sacarlo
    • if (llDetectedKey (0) == llGetOwner)
    • {
  • 25.
    • //Hace listas de los objetos del inventario,
    • list contents = [ ] ;
    • integer I;
    • for (i=0;i<llGetInventoryNumber (INVENTORY_OBJECT); i + +) {
    • contents += llGetlnventoryName (INVEN­TO RY_OBJECT, i);
    • }
    • //Da todos los objetos de una carpeta llGivelnventoryList (llGetOwner (), &quot;Drop Box&quot;, contents);
    • }
    • }
  • 26. Física y más
    • SL tiene un simulador del lado del servidor , lo que significa que los objetos caen, rebotan y chocan de forma correcta.
    • Un código puede cambiar cómo la física afecta a un objeto.
    • Por defecto, un objeto de en SL está sujeto, lo que significa que si lanza un objeto y lo deja ir éste no caerá.
  • 27. Física y más
    • Convertir un estado en físico
    • default
    • {
    • state_entry() {
    • llSetStatus (STATUS_PHYSICS, TRUE);
    • }
    • }
    • Cambiar estado de choque convirtiéndose a fantasma
    • llSetStatus (STATUS_PHANTOM, TRUE);
  • 28. Física y más
    • Aplicar fuerzas : si se cambian las fuerzas de un objeto físico se puede controlar cómo se mueve
    • Una fuerza es un empuje continuo y un impulso es un empuje simple e instantáneo.
    • default
    • {
    • touch_start(integer touched) {
    • // Lanza el objeto en el aire.
    • llApplylmpulse(<0,0,100>, FALSE);
    • } }
  • 29. Física y más
    • Vehículos
    • Hay muchas funciones que permiten cambiar unos veinte parámetros para alterar cualquier característica de cómo se mueve un objeto físico, desde el rebote a la fricción.
    • El código del vehículo es más complejo
      • http://www.lslwiki.net/lslwiki/wakka.php?wakka= vehicles
  • 30. Controles y visualizaciones
    • Tomar el control
    • Un objeto de código puede tener los mismos controles de movimiento que un avatar.
    • Un código tiene que pedir permiso antes de tomar el control del avatar.
    • En el caso de anexos y vehículos especiales, el permiso está automáticamente garantizado, pero aun así el código tiene que solicitarlo.
  • 31. Controles y visualizaciones
    • Visualizaciones
    • Los códigos también controlan la apariencia de un objeto.
    • Ejemplo: cambiar de textura como en las presentaciones. Es mucho más fácil que cambiar de textura en el inventario del objeto.
    • Con unas cuantas fotos se pueden lanzar en una primitiva y que se visualicen.
  • 32. Controles y visualizaciones
    • integer i;
    • default {
    • stateentry() {
    • // Cambiar imagen cada 10 segundos
    • USetTimerEvent (10.0) ;
    • }
    • timer() {
    • if (llGetlnventoryNumber (INVENTORY_TEXTURE) )
    • {
    • i + + ;
    • }
    • else {
    • i = 0;
    • }
    • //configurar la textura en la cara &quot;0&quot; del objeto llSetTexture (llGetlnventoryName (INVENTORY_TEXTURE, i), 0);