Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14497433
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:35:16

下载本文示例代码
  引言:如果你在第一人生里学会了编程,那么现在你可以在第二人生中锻炼你的编程技能,使用林登脚本语言来活动起你在流行的模拟世界里建立的物体吧。   本文代码下载  第二人生(SL)是由林登实验室开发的一个非常流行的多玩家在线游戏(MMOG)。许多人认为第二人生不仅仅是个游戏。如果你对第二人生不熟悉,它就像电影“黑客帝国”,人们生活和工作在一个围绕着他们的虚拟世界里。第二人生非常简单;你的电脑玩家,被称为avatar,在第二人生的3D世界里生活。  在第二人生中没有任何特定的物体,那里所有的一切都完全依赖于你想如何构建它。另外,第二人生是免费的。你必须要注册,但是你只在需要拥有土地时才需要订购。  然而,和“黑客帝国”不同,当前的计算机技术还没有先进到模拟一个物理世界,所以第二人生有两个重要的缺点。首先,你通过一个计算机屏幕来看到第二人生的世界,尽管使用了当前的3D图像技术,它仍然让虚拟世界有一种卡通化的界面。尽管这样,许多第二人生的区域可视化效果是非常好的。  第二,第二人生的模拟不是一个完全的物理模拟。关键的元素,比如重力是存在的。然而,在第二人生里你不能完全的模拟一些如汽车那么复杂的东西,去模拟汽车的内燃引擎和电子器件的所有方面是非常困难的。现代计算机还没有足够的能力去做这样的事。就像你可以在这篇文章中看到的一样,在第二人生里有汽车和其他车辆。  你可以通过一个免费客户端访问第二人生,它有各种平台下的版本,包括Windows,Mac和Unix。另外,林登实验室最近还将客户端开放源码了,这样就开放第二人生给第三方开发者来创建一系列客户端的增强功能。  林登脚本语言介绍  第二人生提供了一个脚本语言称为林等脚本语言(LSL)来填补第二人生简单物理引擎的空缺。程序员创建脚本告诉汽车该如何移动,而非模拟汽车的方方面面。脚本可以播放声音,转向汽车,甚至检测碰撞。比如,为了增加真实感,一个汽车脚本可以阻止汽车在不移动时转向。  本文提供了对LSL的介绍。为了获取最大的收益,我建议你有一个“构建”的基本知识,但是它不用来理解程序代码。构建是将你的3D物体放置到第二人生世界里的过程。构建者创造了你在第二人生里看到的所有东西。  这篇文章假设你已经有些熟悉第二人生中的构建过程。在第二人生中构建并不是非常难的,但是你必须“在”第二人生中构建事物。为了尝试,简单的点击第二人生窗口的底部的“Build”按钮来开始实验。  LSL基础  林登脚本语言初看有点像C语言。然而,它比C语言编程容易。没有指针,你可以直接比较字符串而无须使用strcmp这样的函数。LSL不是面向对象的;你不能创建你自己的对象,程序提供了一些3D相关的对象。LSL是基于状态的。每个LSL脚本有一个特定的状态,运行每个函数来在一系列状态中转化。这是和大部分编程语言不同的概念。当你在大部分语言中构建状态机时,LSL的状态机概念已经是语言的内建部分了。  LSL脚本存在于第二人生中的3D元素的内部。对象是元素的集合。比如,在第二人生中的汽车可以是一个简单物体。但是,汽车对象可以是由很多基本元素组成的,每个部分包含自己的脚本。除此以外,这些基本元素可以互相通信,甚至和人类玩家通信。使用更高级的编程,元素甚至可以和SL外部的Web页面通信。  LSL也是事件驱动的。大部分的第二人生中的物体通过事件触发状态转换而工作。第二人生提供了许多不同的事件类型。许多都是基于用户的,比如用户的触摸或者坐在一个对象上;但是,它也支持计时器事件,无须用户交互。  在剩下的部分,我将给你展示如何在活动一个第二人生中的电梯。  构建一个简单的电梯  作为一个例子,本文将展示如何创建一个在第二人生的摩天大楼里上下升降的电梯。图1显示了电梯所在的摩天大楼。 图1 一个第二人生中的摩天大楼:这是本文中电梯所在的大楼  你可以看到看到这个电梯活动在“Gyeonu”地区,坐标是(51,79)。第二人生使用特定的URL称为“SLURLs”。如果你安装了客户端,你可以直接参观这个电梯。如果这个链接无效,点击SL客户端的map按钮,查找“Gyeonu”,然后在坐标区输入坐标95,23,44。  这个链接带你到一个web站点,这个站点显示了这个电梯所在区域的鸟瞰图。如果你安装了第二人生,你可以选择“Teleport Now”来传送到这个地点。这个电梯允许你在摩天大楼的每层参观,包括顶层。使用电梯你你只需简单的“sit on it”,这是一个内建的动作,出现在你右键点击一个游戏中的物体的弹出菜单里。电梯的弹出菜单让你选择电梯去向何处。你也可以找到每层的一个绿色圆锥,让你呼叫电梯到那一层。  两个脚本控制该电梯。第一个脚本,Elevator.lsl使得电梯移动并且和avatars交互。(参看列表1)。  列表1. Listing 1. The Elevator.lsl Script: You can see the popup menu itemsinteger CHANNEL = 42; // dialog channellist MENU_MAIN = ["Floor 1", "Floor 2", "Floor 3", "Floor 4", "Floor 5", "Floor 6", "Floor 7"]; // the main menufloat BOTTOM = 27.300;float FLOOR_HEIGHT = 10;float SPEED = 1;float target;default{state_entry(){// listen for dialog answers (from multiple users)llListen(CHANNEL, "", NULL_KEY, ""); llSitTarget(<0,-0.5,0.5>, llEuler2Rot(<0,0,-90>) );llSetText("Sit Here to Ride Elevator",<0,0,0>,1.0);target = BOTTOM;}listen(integer channel, string name, key id, string message) {integer idx = llListFindList(MENU_MAIN, [message]);if( idx!=-1 ){llSay(0,"Elevator heading to " message "." );target = BOTTOM (idx*10);state moving;} }changed(integer Change) {llDialog(llAvatarOnSitTarget(), "Where to?", MENU_MAIN, CHANNEL);}}state moving{state_entry(){llSetTimerEvent(0.1);}timer(){vector pos = llGetPos();pos.x = 50.500;pos.y = 90.740;if( pos.z!=target ){if( pos.z>target ){pos.z = pos.z - SPEED;}else{pos.z = pos.z SPEED;}}if( llFabs(pos.z - target) < SPEED ){pos.z = target;llSetTimerEvent(0);llSetPos(pos);llSay(0,"Elevator has reached its target." );state default;} llSetPos(pos);}}   列表2中的代码(callElevator.lsl)应用在绿色的呼叫圆锥上。它和主电梯脚本通信并且召唤电梯箱。  列表2. This script calls the elevator from one of the green floor cones found on each floor of the skyscraper. default{state_entry(){llSetText("Touch to Call Elevator",<0,0,0>,1.0);}touch_start(integer total_number){llShout(42, "Floor 1");}}  尽管列表和下载代码包含了所有的脚本,我仍然帮助你查看一下电梯代码,看看它是如何回应一个sit事件,以及如何显示一个菜单。共3页。 1 2 3 :   引言:如果你在第一人生里学会了编程,那么现在你可以在第二人生中锻炼你的编程技能,使用林登脚本语言来活动起你在流行的模拟世界里建立的物体吧。   本文代码下载  第二人生(SL)是由林登实验室开发的一个非常流行的多玩家在线游戏(MMOG)。许多人认为第二人生不仅仅是个游戏。如果你对第二人生不熟悉,它就像电影“黑客帝国”,人们生活和工作在一个围绕着他们的虚拟世界里。第二人生非常简单;你的电脑玩家,被称为avatar,在第二人生的3D世界里生活。  在第二人生中没有任何特定的物体,那里所有的一切都完全依赖于你想如何构建它。另外,第二人生是免费的。你必须要注册,但是你只在需要拥有土地时才需要订购。  然而,和“黑客帝国”不同,当前的计算机技术还没有先进到模拟一个物理世界,所以第二人生有两个重要的缺点。首先,你通过一个计算机屏幕来看到第二人生的世界,尽管使用了当前的3D图像技术,它仍然让虚拟世界有一种卡通化的界面。尽管这样,许多第二人生的区域可视化效果是非常好的。  第二,第二人生的模拟不是一个完全的物理模拟。关键的元素,比如重力是存在的。然而,在第二人生里你不能完全的模拟一些如汽车那么复杂的东西,去模拟汽车的内燃引擎和电子器件的所有方面是非常困难的。现代计算机还没有足够的能力去做这样的事。就像你可以在这篇文章中看到的一样,在第二人生里有汽车和其他车辆。  你可以通过一个免费客户端访问第二人生,它有各种平台下的版本,包括Windows,Mac和Unix。另外,林登实验室最近还将客户端开放源码了,这样就开放第二人生给第三方开发者来创建一系列客户端的增强功能。  林登脚本语言介绍  第二人生提供了一个脚本语言称为林等脚本语言(LSL)来填补第二人生简单物理引擎的空缺。程序员创建脚本告诉汽车该如何移动,而非模拟汽车的方方面面。脚本可以播放声音,转向汽车,甚至检测碰撞。比如,为了增加真实感,一个汽车脚本可以阻止汽车在不移动时转向。  本文提供了对LSL的介绍。为了获取最大的收益,我建议你有一个“构建”的基本知识,但是它不用来理解程序代码。构建是将你的3D物体放置到第二人生世界里的过程。构建者创造了你在第二人生里看到的所有东西。  这篇文章假设你已经有些熟悉第二人生中的构建过程。在第二人生中构建并不是非常难的,但是你必须“在”第二人生中构建事物。为了尝试,简单的点击第二人生窗口的底部的“Build”按钮来开始实验。  LSL基础  林登脚本语言初看有点像C语言。然而,它比C语言编程容易。没有指针,你可以直接比较字符串而无须使用strcmp这样的函数。LSL不是面向对象的;你不能创建你自己的对象,程序提供了一些3D相关的对象。LSL是基于状态的。每个LSL脚本有一个特定的状态,运行每个函数来在一系列状态中转化。这是和大部分编程语言不同的概念。当你在大部分语言中构建状态机时,LSL的状态机概念已经是语言的内建部分了。  LSL脚本存在于第二人生中的3D元素的内部。对象是元素的集合。比如,在第二人生中的汽车可以是一个简单物体。但是,汽车对象可以是由很多基本元素组成的,每个部分包含自己的脚本。除此以外,这些基本元素可以互相通信,甚至和人类玩家通信。使用更高级的编程,元素甚至可以和SL外部的Web页面通信。  LSL也是事件驱动的。大部分的第二人生中的物体通过事件触发状态转换而工作。第二人生提供了许多不同的事件类型。许多都是基于用户的,比如用户的触摸或者坐在一个对象上;但是,它也支持计时器事件,无须用户交互。  在剩下的部分,我将给你展示如何在活动一个第二人生中的电梯。  构建一个简单的电梯  作为一个例子,本文将展示如何创建一个在第二人生的摩天大楼里上下升降的电梯。图1显示了电梯所在的摩天大楼。 图1 一个第二人生中的摩天大楼:这是本文中电梯所在的大楼  你可以看到看到这个电梯活动在“Gyeonu”地区,坐标是(51,79)。第二人生使用特定的URL称为“SLURLs”。如果你安装了客户端,你可以直接参观这个电梯。如果这个链接无效,点击SL客户端的map按钮,查找“Gyeonu”,然后在坐标区输入坐标95,23,44。  这个链接带你到一个web站点,这个站点显示了这个电梯所在区域的鸟瞰图。如果你安装了第二人生,你可以选择“Teleport Now”来传送到这个地点。这个电梯允许你在摩天大楼的每层参观,包括顶层。使用电梯你你只需简单的“sit on it”,这是一个内建的动作,出现在你右键点击一个游戏中的物体的弹出菜单里。电梯的弹出菜单让你选择电梯去向何处。你也可以找到每层的一个绿色圆锥,让你呼叫电梯到那一层。  两个脚本控制该电梯。第一个脚本,Elevator.lsl使得电梯移动并且和avatars交互。(参看列表1)。  列表1. Listing 1. The Elevator.lsl Script: You can see the popup menu itemsinteger CHANNEL = 42; // dialog channellist MENU_MAIN = ["Floor 1", "Floor 2", "Floor 3", "Floor 4", "Floor 5", "Floor 6", "Floor 7"]; // the main menufloat BOTTOM = 27.300;float FLOOR_HEIGHT = 10;float SPEED = 1;float target;default{state_entry(){// listen for dialog answers (from multiple users)llListen(CHANNEL, "", NULL_KEY, ""); llSitTarget(<0,-0.5,0.5>, llEuler2Rot(<0,0,-90>) );llSetText("Sit Here to Ride Elevator",<0,0,0>,1.0);target = BOTTOM;}listen(integer channel, string name, key id, string message) {integer idx = llListFindList(MENU_MAIN, [message]);if( idx!=-1 ){llSay(0,"Elevator heading to " message "." );target = BOTTOM (idx*10);state moving;} }changed(integer Change) {llDialog(llAvatarOnSitTarget(), "Where to?", MENU_MAIN, CHANNEL);}}state moving{state_entry(){llSetTimerEvent(0.1);}timer(){vector pos = llGetPos();pos.x = 50.500;pos.y = 90.740;if( pos.z!=target ){if( pos.z>target ){pos.z = pos.z - SPEED;}else{pos.z = pos.z SPEED;}}if( llFabs(pos.z - target) < SPEED ){pos.z = target;llSetTimerEvent(0);llSetPos(pos);llSay(0,"Elevator has reached its target." );state default;} llSetPos(pos);}}   列表2中的代码(callElevator.lsl)应用在绿色的呼叫圆锥上。它和主电梯脚本通信并且召唤电梯箱。  列表2. This script calls the elevator from one of the green floor cones found on each floor of the skyscraper. default{state_entry(){llSetText("Touch to Call Elevator",<0,0,0>,1.0);}touch_start(integer total_number){llShout(42, "Floor 1");}}  尽管列表和下载代码包含了所有的脚本,我仍然帮助你查看一下电梯代码,看看它是如何回应一个sit事件,以及如何显示一个菜单。共3页。 1 2 3 : 下载本文示例代码


用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程用林登脚本语言实现第二人生脚本编程
阅读(160) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~