Torque2D MIT 学习笔记(5) ---- 脚本语法(3)
来源:互联网 发布:wait await java 编辑:程序博客网 时间:2024/06/04 18:08
状态控制
和其他编程语言一样,TorqueScript支持分支结构.
if, then, else
if(<boolean expression>) { pass logic}else { alternative logic} // 控制灯光的全局变量$lightsShouldBeOn = true;// 检查灯是否应该打开if($lightsShouldBeOn){ // 开灯 turnOnLights(); echo("Lights have been turned on");}else{ // 关灯 turnOffLights(); echo("Lights have been turned off");}
// 控制灯光的全局变量$lightsShouldBeOn = true;// 检查灯是否应该打开if($lightsShouldBeOn) turnOnLights(); //开灯else turnOffLights(); // 关灯
switch and switch$
If your code is using several cascading if-then-else statements based on a single value, you might want to use a switch statement instead. Switch statements are easier to manage and read. There are two types of switch statements, based on data type: numeric (switch
) and string (switch$
).
TorqueScript支持两种多分支结构
1: switch: 数字类型
switch(<numeric expression>) { case value0: statements; case value1: statements; case value3: statements; default: statements;}
PS: 没有break;
switch($ammoCount){ case 0: echo("Out of ammo, time to reload"); reloadWeapon(); case 1: echo("Almost out of ammo, warn user"); lowAmmoWarning(); case 100: echo("Full ammo count"); playFullAmmoSound(); default: doNothing();}
2: switch$: 字符串类型
switch$ (<string expression>) { case "string value 0": statements; case "string value 1": statements;... case "string value N": statements; default: statements;}
// Print out specialtiesswitch($userName){ case "Heather": echo("Sniper"); case "Nikki": echo("Demolition"); case "Mich": echo("Meat shield"); default: echo("Unknown user");}
循环
和C++一样,Torquescript支持两种循环,分别如下:
For循环
for(expression0; expression1; expression2) { statement(s);}
for(%count = 0; %count < 3; %count++) { echo(%count);}OUTPUT:012
While循环
语法:
while(expression) { statements;}
%countLimit = 0;while(%countLimit <= 5){ echo("Still in loop"); %count++;}echo("Loop was terminated");
函数
Much of your TorqueScript experience will come down to calling existing functions and writing your own. Functions are a blocks of code that only execute when you call them by name. Basic functions in TorqueScript are defined as follows:
归根结底,Torquescript的代码大多都是要调用存在的引擎函数方法和自定义方法.函数方法是一个在需要时主动调用函数名才执行的代码块.
基本的脚本函数定义方式如下:
// function - 脚本函数的关键字// function_name - 函数名// arg0-N... - 参数表(任意个)// statements - 函数逻辑// return val - 返回值function function_name([arg0],...,[argn]) { statements; [return val;]}
例子:
function echoRepeat (%echoString, %repeatCount) { for (%count = 0; %count < %repeatCount; %count++) { echo(%echoString); }}
echoRepeat("hello!", 5);OUTPUT:"hello!""hello!""hello!""hello!""hello!"
如果定义了一个函数名已经存在的方法,Torquescript将覆盖老的函数.即使只是参数数量不同,老的方法仍然会给覆盖.
比如:
function OutputA( %text ){ echo( %text );}function OutputA( %text, %addon ){ echo( %text SPC "+" SPC %addon );}调用: OutputA( "A output function" ); OutputA( "A output function", "AddOn Infomation" );输出:A output function + A output function + AddOn Infomation
Console Functions:
控制台全局方法,是C++函数导出到TorqueScript中使用,是全局函数,比如使用到的echo.
Objects:
对象,用在脚本需要处理游戏对象的复杂情况.需要记住的一点就是在Torquescript中的所有的一切都是一个字符串,但是当需要访问一个精灵,场景对象或者任意一个其他对象,字符串就需要转换为相应的对象ID.
对象的定义语法:
// In TorqueScript%objectID = new ObjectType(Name) { [existing_field0 = InitialValue0;] ... [existing_fieldN = InitialValueN;] [dynamic_field0 = InitialValue0;] ... [dynamic_fieldN = InitialValueN;]};
语法解释:
%objectID - 保存对象句柄的变量,new是一个关键字,他告诉引擎创建一个ObjectType指定的对象实例.
ObjectType - 引擎或者脚本中的定义的任意一个SimObject的继承类或者子类.SimObject的继承对象统称为游戏世界对象.
Name (可选项) - 对象名字符串
existing_fieldN - 初始化已经存在的类成员变量,当然变量必须是导出到脚本的变量.
dynamic_fieldN - 最后是添加一些新的变量,这些变量有唯一性,只属于这里实例化的对象,被称为动态变量.
Handles vs Names 每一个游戏对象都可以通过两个参数来访问,他们分别是:
Handle - 当对象创建时分配的全局唯一的数字ID编号.
Name - 在对象创建时可选的指定对象名.
例子:
// In this example, Truck is the name of the objectnew SceneObject(Truck) { position = "0 0"; size = "5 5";};
Methods 除了创建独立的全局方法之外,Torquescript还允许创建和调用绑定对象的方法(类似于类成员函数).一些重要的控制方法是用C++写好然后导出到脚本中,随时可以使用,要使用这些方法只需要通过(.)符号.
语法:
objHandle.function_name();objName.function_name();
new SceneObject(Truck) { position = "0 0"; size = "5 5";};// 将Truck对象的所有导出方法输出打印到控制台日志.Truck.dump();// 获取对象的数字ID编号$objID = Truck.getID();// 输出IDecho("Object ID: ", $objID);// 获取对象的位置%position = $objID.getPosition();// 输出位置echo("Object Position: ", %position);
上面的代码展示了如何通过对象句柄和对象名来调用对象的方法.另外,Torquescript还支持对象脚本辅助函数的创建.
语法:
// function - 函数定义关键字// ClassName::- 类名// function_name - 函数名// ... - 参数表// statements - 逻辑代码// %this- 传递调用对象的句柄参数// return val - 返回值function Classname::func_name(%this, [arg0],...,[argn]) { statements; [return val;]}
最低要求,控制台成员方法需要传递一个对象的句柄.你将经常看到第一个参数是%this.
人们用this作为提醒,但是你可以随意的命名.
一个简单的例子,输出一个由Player类继承而来的对象,名字叫Samurai,很可能会有一些特殊的造型和玩法给予这个武士对象,所以增加自定义的新方法,如下:
// 武士刀入鞘function Samurai::sheatheSword(%this){ echo("Katana sheathed");}
当创建了一个武士对象,将会获得一个对象ID,假设这个ID为1042,那么我们可以通过调用上面的方法完成入鞘的操作:
1042.sheatheSword();OUTPUT: "Katana sheathed"
这里需要注意,我们并没有传递任何参数给函数,%this参数是默认的,由引擎内部自动传递,不需要我们进行额外的传递.
- Torque2D MIT 学习笔记(5) ---- 脚本语法(3)
- Torque2D MIT 学习笔记(3) ---- 脚本语法(1)
- Torque2D MIT 学习笔记(4) ---- 脚本语法(2)
- Torque2D MIT 学习笔记(27)
- Torque2D MIT 学习笔记(1) ---- 了解
- Torque2D MIT 学习笔记(2) ---- 目录结构
- Torque2D MIT 学习笔记(6) ---- 模块管理
- Shell脚本学习笔记-语法
- 学习笔记之一shell脚本语法
- shell脚本学习笔记(语法)
- MIT 6.828 学习笔记5 Lab3实验报告
- MIT 6.00 1x Lecture 5 Recursion 递归 学习笔记
- (MIT)Deep learning 学习笔记(5)--Linear Regression
- MIT 6.828 学习笔记3 Lab1实验报告
- 国嵌嵌入式学习笔记-链接器脚本语法格式
- MIT算法导论学习笔记-Lecture1
- MIT算法导论学习笔记-Lecture2
- (MIT)Deep learning 学习笔记(1)
- iOS平台XML解析类库对比和安装说明
- 关于窗口
- 进程间通信——消息传递(管道)
- ORACLE下载当中的gateways,companion,clusterware都是什么用途?
- CArchive
- Torque2D MIT 学习笔记(5) ---- 脚本语法(3)
- OpenStack的架构详解(3)
- JUnit
- JS代码放在head和body中有区别吗?
- 变换坐标系的函数——glLoadIdentity()与glTranslatef()和glRotatef()
- 得到客户端IP地址
- 题目10:统计同成绩学生人数
- OpenStack的架构详解(4)
- hdu 1011 Starship Troopers(树形dp)