Second Life --- lsl script 学习(1)

来源:互联网 发布:zm400条码机软件 编辑:程序博客网 时间:2024/06/06 03:35
LSL基础

  林登脚本语言初看有点像C语言。然而,它比C语言编程容易。没有指针,你可以直接比较 字符串而无须使用strcmp这样的函数。LSL不是面向对象的;你不能创建你自己的对象,程序提供了一些3D相关的对象。LSL是基于状态的。每个 LSL脚本有一个特定的状态,运行每个函数来在一系列状态中转化。这是和大部分编程语言不同的概念。当你在大部分语言中构建状态机时,LSL的状态机概念 已经是语言的内建部分了。

  LSL脚本存在于第二人生中的3D元素的内部。对象是元素的集合。比如,在第二人生中的汽车可以是一个简单 物体。但是,汽车对象可以是由很多基本元素组成的,每个部分包含自己的脚本。除此以外,这些基本元素可以互相通信,甚至和人类玩家通信。使用更高级的编 程,元素甚至可以和SL外部的Web页面通信。

  LSL也是事件驱动的。大部分的第二人生中的物体通过事件触发状态转换而工作。第二人生提供了许多不同的事件类型。许多都是基于用户的,比如用户的触摸或者坐在一个对象上;但是,它也支持计时器事件,无须用户交互。

状态(State)是LSL中的一种流程控制手段,在不同状态下触发同一事件时,可以产生不同的行为,我们可以利用状态使得LSL实现相对复杂的功能。

***************************************************************************************************************

下面是一个简单的例子,引自LSL Wiki

default
{
    state_entry()
    {
        llSay(0,"Hello, Avatar!");
    }

    touch_start(integer total_number)
    {
        state restart_default;
    }
}

state restart_default
{
    state_entry()
    {
        state default;
    }
}

对于一个LSL脚本来说,必须至少有一个被称为default的默认状态,而每一个状态中必须至少含有一个事件(可以是所有事件中的任意一个)。default的状态是必须放置在其他状态之前的,如果有其他状态被定义在default之前,则会产生语法错误。

LSL中其他的流程控制手段有

循环:for,do-while,while 与C/Java中用法类似

选择:if-else 用法与C/Java类似,但使用if/else if时选择条件最多不超过24个,如果需要更多选择情况,则需要在选择条件中嵌套使用if-else

jump: 类似其他语言中的goto

retrun: 与C/Java中用法类似

数据类型特点

integer 整型 32位 范围: -2147483648 到 2147483647

float IEEE-754标准32位浮点数

string 字符串 采用UTF-8标准

key 用来标记SL中物体、图象、声音、动作等库存文件以及用户名的特殊字符串
如 "66864f3c-e095-d9c8-058d-d6575e6ed1b8" 就是一个key

list LSL中没有array这个数据类型,作为替代,LSL中使用了list,list 可以看成时一个1维的array,list中可以存放除list外LSL支持的所有数据类型

LSL中引入了2个三维的数据类型

vector 向量 vector由3个浮点数组成如 vetctor a = <1.0,2.0,3.0>;

rotation 旋转 rotation由4个浮点数组成 如 rotation b = <0.0,0.0,0.0,1.0>;

LSL的库函数

LSL中一共有30个类别约200多个库函数,提供用户最大的使用方便库函数类别如下:

  1. Agent/Avatar
  2. Camera
  3. Communications
  4. Collision
  5. Color
  6. Controls
  7. Dataserver
  8. Detection
  9. Dynamics/Movement/Physics
  10. Group
  11. Inventory
  12. Land (Ground/Terrain)
  13. Light
  14. Link
  15. List
  16. Math
  17. Particle
  18. Primitive/Object
  19. script
  20. Sensor
  21. Simulator (Environment/World)
  22. Sound
  23. String (Text/Name)
  24. Teleport
  25. Texture
  26. Time
  27. Transformation: Rotation/Scaling/Translation
  28. Vehicle
  29. Video
  30. Weather
原创粉丝点击