SlideShare una empresa de Scribd logo
mundos virtuales  Linden Scripting Language Susana Gómez departamento de informática universidad de Vigo
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.
Acceso al código Seleccionar primitiva + tabla de contenido de la ventana Construir + botón  Nuevo script    se abrirá la ventana de Editar script.
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.
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
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
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.
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.
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.
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 .
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 “”
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
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
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
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.
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.
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
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); }  }
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.
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);   } 
//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) );  }
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;); } }
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
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) {
//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); }  }
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á.
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);
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); } }
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
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.
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.
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);

Más contenido relacionado

ODP
Seccion Fundamentos SCJP
PPTX
DOCX
15. quispe coyla, juan
DOCX
Informe tecnico u4 final
PDF
Carro De Compras
PDF
Manual programacion arduino
PDF
Manual+programacion+arduino
PDF
Construyendo rootkits basicos
Seccion Fundamentos SCJP
15. quispe coyla, juan
Informe tecnico u4 final
Carro De Compras
Manual programacion arduino
Manual+programacion+arduino
Construyendo rootkits basicos

Similar a Mv Lsl (20)

PDF
Desarrollo de rootkits en Linux [GuadalajaraCON 2013]
PPTX
Action script 3
PPT
Enclausulamiento java
DOCX
Caraline Cañas
PPTX
Thalia castro 1101
PPTX
Introducción al desarrollo Android, Sesión 2
PPTX
Android UC3M Sesión 2
DOCX
Fundamentos de visual basic
PPSX
Codemotion 2014 - Introducción a Unity
PDF
Curso Swift
DOC
CONEXION A LA BASE DE DATOS SQLITE A TRAVES DE UNA APLICACION MOVIL ANDRO...
PDF
Introducción a Qt
PDF
Elio Rojano - VoIP2DAY 2016 | Que hace tu Asterisk cuando no miras
PDF
Qué hace tu Asterisk cuando no miras
PPTX
Framework .NET 3.5 06 Operativa básica del framework .net
ODP
La web como Plataforma con Dojo Toolkit
PDF
Tarea_Investigacion programacion .pdf
PDF
Conceptos basicos de_vhdl
PPT
Introduccion a Android
Desarrollo de rootkits en Linux [GuadalajaraCON 2013]
Action script 3
Enclausulamiento java
Caraline Cañas
Thalia castro 1101
Introducción al desarrollo Android, Sesión 2
Android UC3M Sesión 2
Fundamentos de visual basic
Codemotion 2014 - Introducción a Unity
Curso Swift
CONEXION A LA BASE DE DATOS SQLITE A TRAVES DE UNA APLICACION MOVIL ANDRO...
Introducción a Qt
Elio Rojano - VoIP2DAY 2016 | Que hace tu Asterisk cuando no miras
Qué hace tu Asterisk cuando no miras
Framework .NET 3.5 06 Operativa básica del framework .net
La web como Plataforma con Dojo Toolkit
Tarea_Investigacion programacion .pdf
Conceptos basicos de_vhdl
Introduccion a Android
Publicidad

Mv Lsl

  • 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);