| 脚本实例教程大全 作者:Tony 时间:2007-1-17 17:48:33 |
第 1 楼 |
脚本实例教程一:方向
相关:Orientation. llGetRot(),llRot2Euler() // Code by Felix xu of www.slbazar.comdefault { touch_start(integer total_number) { vector Deg = llRot2Euler(llGetRot()) * RAD_TO_DEG; // 显示度数 llSay ( 0, "Current orientation vector is " + (string)Deg + " degrees"); } } // End of code; |
|
| 作者:Tony 时间:2007-1-17 17:50:16 |
第 2 楼 |
脚本实例教程二:矢量
Vectors. 1) 位置 vector < x,y,z > 米 2) 方向 vector < x,y,z > 度 llGetPos() 函数得到当前位置 // Code by Felix xu of www.slbazar.comdefault { touch_start(integer total_number) { // get current position vector Pos = llGetPos(); // display position llSay ( 0, "Current postion vector is " + (string)Pos + " metres"); } } // End of code;
[align=right][color=#000066][此贴子已经被作者于2007-1-17 17:52:13编辑过][/color][/align]
|
|
| 作者:Tony 时间:2007-1-17 17:52:53 |
第 3 楼 |
脚本实例教程三 动画效果
Animation. 这个例子是用粒子系统函数 llParticleSystem 发出一串黄色的光芒. 程序延迟十秒然后重置. // Code by Felix xu of www.slbazar.cominteger second; default { state_entry() { second == 0; llParticleSystem( [] ); //reset system state new; } } state new { touch_start(integer total_number) { // output particles llParticleSystem( [ PSYS_PART_FLAGS, PSYS_PART_WIND_MASK | PSYS_PART_EMISSIVE_MASK, PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_EXPLODE, PSYS_PART_START_COLOR, <1,1,0> ] ); llSetTimerEvent( 1 ); } timer () //delay 10 seconds before reset { second ++; if(second > 10) { llResetscript(); //reset } } } // End of code; |
|
| 作者:Tony 时间:2007-1-17 17:53:18 |
第 4 楼 |
脚本实例教程四 定时器的使用
Timers. llSetTimerEvent 函数调用timer 事件每秒一次. // Code by Felix xu of www.slbazar.com// The timer event, which randomly changes the background colour of the poster, is called once every second. After 10 seconds (colour changes) the poster is reset to it's initial state. integer count; default { state_entry() { llSetTimerEvent( 0 ); //disable timer llSetColor( <1,1,1> , ALL_SIDES ); } touch_start(integer total_number) { count == 0; // zero count llSetTimerEvent( 1 ); } timer () // run this code every time the timer event is raised { count ++; //increment count llSetColor(<llFrand(1),llFrand(1),llFrand(1)>,ALL_SIDES); if(count > 10) { llResetscript(); } } } // End of code |
|
| 作者:Tony 时间:2007-1-17 17:53:46 |
第 5 楼 |
脚本实例教程五 states 和 颜色矢量的使用
例子中演示的是一个绿色,黄色,红色和白色背景颜色的状态转换. // Code by Felix xu of www.slbazar.comdefault { state_entry() { vector prim_color = < 1,1,1 >; llSetColor( prim_color, ALL_SIDES ); } touch_start(integer total_number) { llSay(0, "Green State"); vector prim_color = < 0,0.75,0 >; llSetColor( prim_color, ALL_SIDES ); //中绿色 state amber; //switch to the new state } } state amber { touch_start(integer total_number) { llSay(0, "Amber State"); vector prim_color = < 1,0.75,0 >; llSetColor( prim_color, ALL_SIDES ); state red; } } state red { touch_start(integer total_number) { llSay(0, "Red State"); vector prim_color = < 1,0,0 >; llSetColor( prim_color, ALL_SIDES ); state white; } } state white { touch_start(integer total_number) { llSay(0, "White State"); state default; } } // End of code; |
|
| 作者:Tony 时间:2007-1-17 17:54:08 |
第 6 楼 |
脚本实例教程六 while循环
while while 循环的例子.猜猜能循环几次? // Code by Felix xu of www.slbazar.comdefault { state_entry() { llSay(0, "Compile Successful!"); } touch_start(integer total_number) { integer count = 1; integer maxcount = 3; while (count < maxcount) { llSay(0,"I'm repeating myself"); count = count + 1; } } } // End of code; |
|
| 作者:Tony 时间:2007-1-17 17:54:27 |
第 7 楼 |
脚本实例教程七 for 循环
例子演示的是在0频道说三次"hello". // Code by Felix xu of www.slbazar.comdefault { state_entry() { llSay(0, "Compile Successful!"); } touch_start(integer total_number) { integer j; integer count = 3; for (j = 0; j < count; j++) { llSay(0, "Hello"); } } } // End of code; |
|
| 作者:Tony 时间:2007-1-17 17:55:39 |
第 8 楼 |
脚本实例教程八 if,if-else循环
下面是if, if-else的演示 // Code by Felix xu of www.slbazar.com// 下面的程序包含两个状态 default 和 new. 例子中状态传递是必需的,是为了防止程序不断的监听和回应来自0频道的信息。 default { touch_start(integer total_number) { llSay(0, "What is the number of this poster? Please reply using chat."); state new; } } state new { state_entry() { llListen(0,"",NULL_KEY, ""); } listen(integer channel, string name, key id, string message) { if(message=="14") { llSay(0,"Well done your answer is correct"); state default; } else { llWhisper(0,"Sorry wrong answer, please click on this poster to try again"); state default; } } } // End of code; |
|
| 作者:Tony 时间:2007-1-17 17:57:40 |
第 9 楼 |
脚本实例教程九 状态入口不是必须的
state_entry 事件不是必需的.下面的程序就是演示了这个道理.里边只有touch_start函数 // Code by Felix xu of www.slbazar.comdefault { touch_start(integer total_number) { llSay(0, "It still runs"); } } // End of code; |
|
| 作者:Tony 时间:2007-1-17 17:58:37 |
第 10 楼 |
脚本实例教程十 URL联接的使用
|
|
| 作者:Tony 时间:2007-1-17 17:58:58 |
第 11 楼 |
脚本实例教程十一 爆炸效果函数
连载十一 爆炸 函数 llMakeExplosion 例子演示一个用此函数造成的爆炸效果. 纹理的名字必须是“explosion”. // Code by Felix xu of www.slbazar.comdefault { touch_start(integer total_number) { llMakeExplosion(10, 3.0, 2.0, 5.0, 20, "explosion", <0.0, 2.0, 0.0>); } } // End of code; |
|
| 作者:Tony 时间:2007-1-17 17:59:26 |
第 12 楼 |
脚本实例教程十二 改变纹理材质
用下面的函数改变纹理材质 llSetTexture() ,llGetInventoryName() ,llGetInventoryNumber() 例子演示的是材质的一个幻灯片似的变换 // Code by Felix xu of www.slbazar.cominteger counter = 0; default { state_entry() { llSetText("Touch for next slide", <0,1,0>, 3); llAllowInventoryDrop(FALSE); } touch_start(integer total_number) //when user touches object { llSay ( 0, "Texture identifier is: " + (string)counter); string texture = llGetInventoryName(INVENTORY_TEXTURE, counter); llSay ( 0, "Texture name is: " + (string)texture); llSetTexture(texture,3); counter = counter + 1; if (counter >= llGetInventoryNumber(INVENTORY_TEXTURE)) { counter = 0; // reset counter index and restart loop } } } // End of code; |
|
| 作者:Tony 时间:2007-1-17 17:59:47 |
第 13 楼 |
脚本实例教程十三 透明度的改变
llSetAlpha: 在second life中你会发现有些时候物体只能从内部可见。透明度是prim的一个属性. 由 llSetAlpha() 函数控制调节. 下面的脚本演示从前面看物体是透明的. // Code by Felix xu of www.slbazar.cominteger second; default { state_entry() { second == 0; llSetAlpha(0.0, ALL_SIDES); llSetAlpha(1.0, 3); } touch_start(integer total_number) { llSetAlpha(0.0, 3); llSay(0, "Please click on this poster to make it reappear"); state new; } } state new { touch_start(integer total_number) { llResetscript(); //reset } state_entry() { llSetTimerEvent( 1 ); } timer () //延迟10 秒reset之前 { second ++; if(second > 10) { llResetscript(); //reset } } } // End of code; |
|
| 作者:Tony 时间:2007-1-17 18:00:03 |
第 14 楼 |
| |
| 脚本实例教程十四 浮动文本
Floating Text. Floating text 是飘浮在物体之上的一个属性. 由 llSetText() 函数控制开关. 具体看实例. // Code by Felix xu of www.slbazar.comdefault // 添加文本 { touch_start(integer total_number) { llSetText("You're currently in " + llGetRegionName(), <0,1,0>, 1); llSay(0, "Click to remove floating text"); state new; } } state new // 移除文本 { touch_start(integer total_number) { llSetText("", <0,0,0>, 1.0); llResetscript(); } } // End of code; | |
|
| |
|
| 作者:Tony 时间:2007-1-17 18:00:25 |
第 15 楼 |
| |
| 脚本实例教程十五 远程传送
例子演示的是两层之间的切换 // Code by Felix xu of www.slbazar.com// Level 1 vector target=<227,31,300>; default { state_entry() { llSetSitText("Level 1"); rotation my_rot=llGetRot(); llSitTarget((target - llGetPos()) } changed(integer change) { llUnSit(llAvatarOnSitTarget()); } touch_start(integer total_number) { llSay( 0, "Please right click poster and choose Level 1"); } } // End of code; | |
|
| |
|
| 作者:Tony 时间:2007-1-17 18:00:41 |
第 16 楼 |
| |
| 脚本实例教程十六 改变方位
default { state_entry() { vector startPoint = llGetPos(); } touch_start(integer total_number) { llSay( 0, "Starting Rotation" ); // 沿Y轴旋转10度. rotation Y_rot = llEuler2Rot( < 0, 10 * DEG_TO_RAD, 0 > ); // 360 度按照每次10 度循环. integer i; for( i = 1; i < 37; i++ ) { rotation newRotation = llGetRot() * Y_rot; llSetRot( newRotation ); } llSay( 0, "Rotation stopped" ); } } // End of code; | |
|
| |
|
| 作者:Tony 时间:2007-1-17 18:00:59 |
第 17 楼 |
脚本实例教程十七 改变位置
integer counter; integer second; vector startPosition; default { state_entry() { counter = 0; startPosition = llGetPos(); } touch_start(integer total_number) { counter = counter + 1; llSay( 0, "Moving!"); llSetTimerEvent( 1 ); //定时器开启每秒一次. } timer() { second++; // 选择随即量 float X_dis = llFrand( 3.0 ); float Y_dis = llFrand( 3.0 ); float Z_dis = llFrand( 3.0 ); vector displacement = < X_dis, Y_dis, Z_dis >; vector newPosition = startPosition + displacement; // re-position the object llSetPos( newPosition ); //十五秒后恢复物体初始位置 if ( second > 14 ) { while ( llVecDist( llGetPos(), startPosition ) > 0.001) { llSetPos( startPosition ); } llSay( 0, "Stationary!" ); llResetscript(); } } } // End of code; |
|
| 作者:yaoyu 时间:2007-2-13 6:03:21 |
第 18 楼 |
再帖点实用的 比如一些商品,货架,店铺...用的脚本 |
|
| 作者:caini 时间:2007-2-13 11:25:59 |
第 19 楼 |
| 支持,再丰富实用点。 |
|
| 作者:ryebread 时间:2007-3-1 23:29:39 |
第 20 楼 |
| 谢谢,慢慢来学:) |
|
| 作者:dhqgood 时间:2007-3-2 11:03:59 |
第 21 楼 |
好帖 |
|
| 作者:donctyou 时间:2007-3-18 14:03:02 |
第 22 楼 |
| 光列例子,没语法说明 |
|
| 作者:d_count 时间:2007-3-29 10:45:26 |
第 23 楼 |
支持LS,最好有解释说明的,不然光看语法一点都不懂原理的。 |
|
| 作者:23110000 时间:2007-3-31 15:31:46 |
第 24 楼 |
3 (28,25) : error : name not define with scope |
|
| 作者:pickgold168 时间:2007-4-15 15:02:07 |
第 25 楼 |
| 谢谢啦,慢慢地学吧 |
|
| 作者:w1mmm1w 时间:2007-4-19 20:37:38 |
第 26 楼 |
| ao,好多阿,谢谢楼主共享阿! |
|
| 作者:ttt111 时间:2007-5-4 20:00:04 |
第 27 楼 |
| 好文章。 |
|
| 作者:romanticmoon 时间:2007-5-8 13:57:43 |
第 28 楼 |
好帖,楼主有详细的解释吗? |
|
| 作者:金字塔 时间:2007-5-15 21:09:29 |
第 29 楼 |
请问,造房子也要用脚本吗,能用其他软件画好,直接导入SL中吗? |
|
| 作者:azhuang111 时间:2007-6-6 9:51:30 |
第 30 楼 |
| 希望楼主 能花点时间 解释下 新手看不懂 |
|
| 作者:zxy921113 时间:2007-6-15 19:49:01 |
第 31 楼 |
如何运行脚本 |
|
| 作者:sunstear 时间:2007-8-11 15:03:49 |
第 32 楼 |
顶 |
|
| 作者:泉少 时间:2007-10-22 12:06:53 |
第 33 楼 |
| 脚本是在游戏里面做呢?还是在自己的PC面前做好了 然后再导过去呢?? |
|
| 作者:ikaka 时间:2008-7-11 11:43:20 |
第 34 楼 |
| zan |
|
| 作者:TingMing 时间:2008-7-27 11:56:53 |
第 35 楼 |
| 晕~看都看不明。。。 |
|
| 作者:mingming1235 时间:2008-7-30 22:21:44 |
第 36 楼 |
请问知道引擎源代码,在哪下载吗? |
|
| 作者:toll 时间:2008-10-24 20:50:08 |
第 37 楼 |
| 很不错。 |
|
|