林登脚本语言初看有点像C语言。然而,它比C语言编程容易。没有指针,你可以直接比较 字符串而无须使用strcmp这样的函数。LSL不是面向对象的;你不能创建你自己的对象,程序提供了一些3D相关的对象。LSL是基于状态的。每个 LSL脚本有一个特定的状态,运行每个函数来在一系列状态中转化。这是和大部分编程语言不同的概念。当你在大部分语言中构建状态机时,LSL的状态机概念 已经是语言的内建部分了。
LSL脚本存在于第二人生中的3D元素的内部。对象是元素的集合。比如,在第二人生中的汽车可以是一个简单 物体。但是,汽车对象可以是由很多基本元素组成的,每个部分包含自己的脚本。除此以外,这些基本元素可以互相通信,甚至和人类玩家通信。使用更高级的编 程,元素甚至可以和SL外部的Web页面通信。
LSL也是事件驱动的。大部分的第二人生中的物体通过事件触发状态转换而工作。第二人生提供了许多不同的事件类型。许多都是基于用户的,比如用户的触摸或者坐在一个对象上;但是,它也支持计时器事件,无须用户交互。
状态(State)是LSL中的一种流程控制手段,在不同状态下触发同一事件时,可以产生不同的行为,我们可以利用状态使得LSL实现相对复杂的功能。
***************************************************************************************************************
下面是一个简单的例子,引自LSL Wiki
{
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多个库函数,提供用户最大的使用方便库函数类别如下:
- Agent/Avatar
- Camera
- Communications
- Collision
- Color
- Controls
- Dataserver
- Detection
- Dynamics/Movement/Physics
- Group
- Inventory
- Land (Ground/Terrain)
- Light
- Link
- List
- Math
- Particle
- Primitive/Object
- script
- Sensor
- Simulator (Environment/World)
- Sound
- String (Text/Name)
- Teleport
- Texture
- Time
- Transformation: Rotation/Scaling/Translation
- Vehicle
- Video
- Weather