Files
dsProject/dsLightRag/Algodoo/Doc/语法.txt

870 lines
31 KiB
Plaintext
Raw Normal View History

2025-08-14 15:45:08 +08:00
Thyme 语 言 介 绍
Thyme 语言是专门为Algodoo 设计的内置编程语言。其本身具有的简单易用的特点给 用户提供了极其方便的编程环境,可以让用户快速上手使用。同时, Thyme 语言也是非常 强大的在Algodoo 中用好了Thyme 语言,可以帮助您做出更多更有趣的场景,但它不仅 仅局限于此因Algodoo 本身是由 C++制作的,如果可以找到并借用外部的接口,那么
Algodoo 将会拥有属于自己的额外内容包。
本教程主要针对Thyme 语言进行讲解不会涉及到C++, 如果想要学习C++的话,可 以去百度上查找C++相关教程自行学习。
2.Algodoo 控 制 台
1. 控制台是什么
Algodoo 控制台是一个工作在后台的信息处理终端,在 Algodoo所做的大部分操作都会 显示在控制台中。同时,控制台也是一个可以进行代码编辑的地方,用户在场景中所编辑 的所有代码都能在控制台中找到,当然,控制台中所做的大部分修改也能在场景中体现出 来。
总之,控制台是一个编程学习的好地方。
2. 如何打开控制台
在 Algodoo 打开后我们会进到一个场景里这时我们只要按下“ESC”键下面的“~” 键或者 F10 键,就会从屏幕上方弹出一个黑色窗口,这代表着我们已经进入到控制台中了, 同样的,再次按下会隐藏控制台。
3. 控制台操作按键
因为 Algodoo 的控制台不能像别的窗口一样随便查看,下面将简单介绍几个控制台使 用的按键:
“←”“→ ”方向键:可以在控制台中最后一个“>”下方所在的可编辑输入框中调整 光标位置
“个”“↓”方向键:可以让执行过的代码再此出现到输入框中,以便于再次手动执 行
“tab” 键:当输入任意字符时,按下这个键即可自动补全完整代码
“home”“end” 键:可以让光标快速定位到该行的最前和最后
“page up”“page down”键可以让控制台的显示上翻和下翻
Algodoo 贴吧专属 2 不可商用,违者必究
3.Thyme 语法
1.基础部分
(1)变量
A.变量声明
变量是编程语言中最重要的一部分,声明一个变量首先要有变量名,这里举几个例子:
Variable1=1
Variable2=true
Variable3=2.41
Variable4="Var"
上述四个均是变量声明, Variable1~Variable4 均是变量名,赋值符号后面的则是该变量的值, 这样做完之后, 一个变量就声明好了,接下来怎么用,就要看自己的需要了。
注意Thyme 语言的变量命名规则:变量通常只能由英文、数字和下划线组成,且数字不 能放在变量名的最前面(这个很重要!!!这个很重要!!!这个很重要!!!),如果 是中文变量的话,需要在变量后方加一个空格再进行赋值,其余条件同上。
B. 变量类型
①整数变量
整数变量正如其名,这里的变量使用的就是数学上定义的整数,比如 Variable=1。
②浮点数变量
浮点数又称作小数,数学上所涉及到的全部小数包括有理数和无理数都可以作为这个 变量的值,比如 Variable=61.6782。
③字符串变量
字符,顾名思义,就是我们平常用到的每个汉字,每个英文字母,甚至是数字,特殊 符号。字符串则是将这些字符连接起来后的一个完整的词语,短语或句子,在这里,字符 串变量的声明需要有一对双引号("")来引起一个字符或一个字符串,并将这个赋给变量, 比如 Variable=“a 啊12%… … !”。
④布尔变量
布尔值是由英国的数学家乔治 · 布尔发明的,它只有两种状态,即真(true) 和假(false), 在声明的时候只需要将 true 或 false 赋给变量即可,比如 Variable =false。
注:上述四种变量里只有整数变量和浮点数变量存在负值。
Algodoo 贴吧专属 3 不可商用,违者必究
C.变量的使用
变量不同于常量,它是指变化的量、可变的量,将声明好的变量利用起来是非常重要的。 这里给出几种利用方式,以便于参考:
①手动声明(赋值)
Variable1=true 或 Variable2=6221 或 Variable3="ab2"或 Variable4=251.61 <变量名> = <变量值>
②变量之间的声明(赋值)
Variable2=251.1
Variable1=Variable2
此时 Variable1的类型会自动变成 Variable2的类型并获取 Variable2 的值。 ③变量的重复使用
Variable1=1 (此时 Variable1 的值是1)
Variable1=Variable1+1 (此时 Variable1的值是2)
Variable1=1 (此时 Variable1的 值 是 1 )
Variable1=Variable1+Variable2 (此时 Variable1的值取决于 Variable2的 值 ) 例 Variable1=6 (此时 Variable1的值是6)
Variable2=Variable1
Variable3=Variable1
此时 Variable2 与 Variable3 的值等同于 Variable1的值
D. 在何处可以声明和使用变量 ①控制台
②物件的脚本选单中
(2)运算符
运算符的种类
在 Thyme 中的运算符有以下几类:
①计算运算符
a.+ 加 b.- 减
c.* 乘
d./ 除
e.% 取余 f.^ 幂运算
②逻辑运算符
a.&& 逻辑与 b.|| 逻辑或 c.! 逻辑非
③条件运算符
a.> 大于
b. < 小 于
C.== 等于
d.>= 大于等于 e.<= 小于等于 f.!= 不等于
④其他运算符
a.= 赋值运算符
b., 逗号
c.() 圆括号 d.; 分号
e.{} 花括号
f.[] 方括号
⑤判断运算符
条 件 ? {结果A} : {结果 B}
(3)If 条件判断
If 条件语句是程序执行的流程中最重要的一部分,在其他的编程语言中是这样,在 Thyme 中也是如此,不过相对的, Thyme 的语法与其他编程语言依旧有所区别。
表达式:条件 ? {条件为真后所执行的代码} : {条件为假后所执行的代码}
例子:
①假设当前有个变量 A 且它的值是1,现在要求另一个变量 B 在 A 小于1时对外输出2, 在 A 大于等于1时对外输出3,则书写方式如下:
A < 1 ? {
B=2
Thyme 脚本基础教程v1.0 Algodoo 贴吧团队制作
}:{
B=3
}
②假设当前物体不具有杀手特性,现在有要求需要该物体具有杀手特性时本身颜色会变成 红色,则书写方式如下:
killer?{
color=[1,0,0,1]
}:{}
(4)For 循 环
For循环语句作为 Thyme 中基本的流程语句,也是相当的重要,它一般在数组赋值和 刷物体上具有十分重要的意义。
表达式: for(循环次数,(自变量)=>{每次循环都要执行的代码})
例子:
①单纯利用for的循环次数来执行代码
假设目前的场景中没有任何的圆形此时要求需要刷出5个默认的圆不更改其他设 置,则书写方式如下:
for(5,(x)=>{
Scene.addCircle({}) })
以上代码执行完毕后将会在原点刷处5个默认圆。
②利用 for循环中的自变量来执行代码
假设目前的场景中没有任何的圆形此时要求需要刷出5个默认的圆并让它们的色相 依次增加五度,则书写方式如下:
for(5,(x)=>{
y=x*5;
Scene.addCircle({
colorHSVA:=[y,1,1,1]
})
})
以上代码在执行之后的观察中可以发现第一个球开始每一个球都会逐渐增加5° 的值,直至循环结束。
在这里如果想要得到 for中自变量的终值则写法如下
for(n,(x)=>{
X
})
for(n,(x)=>{
y=X
})
Algodoo 贴吧专属 6 不可商用,违者必究
Thyme 脚本基础教程 v1.0 Algodoo 贴吧团队制作
这块代码执行之后将会自动把自变量 x 的值输出到 for的外面。
(5)方法(函数)
编程语言中经常会提到方法(函数)这个名词,而这个名词也无一例外地出现在了 Thyme 的语法中。
①无参函数
一个不存在参数的函数被称为无参函数,在 thyme 中它有一个标准形式,它被写成:
方法名(函数名) = {具有相关功能的代码}
例 子
A. 现 需 要 一 个 能 够 刷 半 径 为 1m, 生 成 位 置 为 鼠 标 位 置 颜 色 为 白 色 的 圆 的 套 组 代 码 因 控 制台中一遍遍输入太过麻烦,现在需要将其压缩一下,变成:
AddSpecialCircle={
Scene.addCircle({
pos:=App.mousePos;
radius:=1;
color:=[1,1,1,1]
})
}
输完后回车,即可得到这样一个具有特殊功能的代码 AddSpecialCircle, 在控制台中输
入 AddSpecialCircle 后回车将会在鼠标指针的位置生成一个半径为1m, 颜色为白色的圆。
B. 现 在 我 有 一 个 数 字 A=1, 我 需 要 对 它 进 行 一 个 加 1 运 算 但 是 因 为 一 遍 遍 手 动 输 入 非 常 不方便,我可以将这个动作进行打包,变成:
AddOne={
A=A+1
}
这样, 一个对 A 进行加一的功能就做出来了,在输入 AddOne 回车后,我们不仅可以 发现 A 加了1变成了2,同时也可以发现控制台中也会出现 一 个与 A 相同的数字,这个数 字 可 以 被 称 作 返 回 值 它 取 决 于 这 个 函 数 中 最 后 一 行 输 出 的 值 。 这 里 我 再 引 入 两 个 变 量 B 和 C, 并将它们赋值为 B=100 和 C=20, 此时,将 AddOne 改成:
AddOne={
A=A+1;
B=B+2;
C=C+5;
}
Algodoo 贴吧专属 7 不可商用,违者必究
Thyme 脚本基础教程 v1.0 Algodoo 贴吧团队制作
回车后输入 AddOne, 我们会得到 一 个数25,这个就是 AddOne 中 C=C+5 所得到的值,
当然,如果想要输出 A 或 B 的值也是可行的,只需要在最后加上 A(或 B)的字母即可。
AddOne={
A=A+1;
B=B+2;
C=C+5;
A(或 B);
}
这个特性可以用来进行一些其他的运算,这里不再进行过多阐述。
②有参函数
有参函数顾名思义就是有参数的函数,他的书写规则与无参函数有些不同,它通常被 写成:
方法名(函数名)=(参数1,参数2,…,参数 n)=>{ 具有相关功能的代码}
例子:
A. 有参数但不使用参数(功能近似等同无参函数)
B. 有参数且使用参数
首先我们定义外部变量 A=100 、B=30 0, 现在我们需要有个函数能够让 A 与 B 的值自由 变化,写法如下:
ChangeNumA=(c)=>{
A=A+c;
B=B+C
}
回车并输入 ChangeNumA(100), 我们可以得到它的值是400,同时 A 的值也变成了
200,B 的值变成了400,如果继续输入 ChangeNumA(100), 它的值会变成500,同时同时
A 的值也变成了300, B 的值变成了500。在这里有参函数的返回值与无参函数是相同的 最后 一 行的值即为输出的返回值,这个返回值在函数之间的调用中非常有用,在其他地方 也很有用,在这里不做过多解释。
在这里,有参函数有一个特别的特性,那就是函数型参数。
函数型参数在 Thyme 并不能直接以函数形式直接出现在参数括弧中,它们通常会把自 己藏在 一个函数的内部,这里给大家举个例子:
fun=(function,x)=>{
function(x);
};
注:这里的 function 已经构成了函数型参数
将上方代码输入到控制台中,我们便可以得到 一个带有函数型参数的有参函数,这 一 类的函数使用有这样 一个规则,即:
Algodoo 贴吧专属 8 不可商用,违者必究
Thyme 脚本基础教程 v1.0 Algodoo 贴吧团队制作
fun((函数型参数的虚拟自变量)=>{
函数型参数的函数表达式
},影响该函数参数的实际自变量);
现在,我们将
“函数参数的虚拟自变量”改成 z;
“函数参数的函数表达式”改为 z^2;
“影响该函数参数的实际自变量”改为任意数字这里我们输个4; 现在我们可以得到这样一个函数
fun((z)=>{z^2},4)
回车之后我们可以得到一个结果16,这样, 一个函数参数的使用就结束了。
顺便提醒一下这里Thyme 所写过的所有代码都是可以被新的代码覆盖的,使用起来 非常方便,如果能做到同一变量的复用,则可以尽最大可能减少资源占用。
最后,注意使用的参数名不要与局部变量,方法名,类名等重复,否则会报错。
(6)类
类的概念在 Thyme 中比较模糊,它从某种意义上可以划为无参函数中的一部分,但是 却不同于无参函数,同时,它又可以划为有参函数,同样的也不属于有参函数,它的存在 比较特别,我们接下来将对它进行简单的解释:
①类的书写形式
类名={
//这是一个类变成实例的前提//
类的代替名=alloc;
//这一块表示类的变量被初始化//
类的代替名.变量名1=数据;
类的代替名.变量名2=数据;
类的代替名.变量名 N= 数据;
类的代替名.方法1(函数1)=null;
类的代替名.方法2(函数2)=null;
类的代替名.方法 N(函数 N)=null;
//这一块表示类中函数的定义//
类的代替名->{
无参数方法(无参函数)=>{内容};
有参数方法(有参函数)=(参数)=>{内容}
Algodoo 贴吧专属 9 不可商用,违者必究
};
//将类所蕴含的所有东西全部输出//
类的代替名;
}
②类中的相关知识点
A. 一个类可以用来表示一个大的功能,也可以将一些函数归纳整理在这一个类中,具体用 来干什么,全看个人。
B.Alloc 是 thyme 中用来实例化类的一个代码,如果没有它,编译器在进行实例化时将不 会认为这个类是可用的。
C. 一个类在制作完毕后一定要在使用之前进行实例化,否则这个类将不会有任何作用。
D. 类中可以不包含变量,也可以不包含方法(函数),如果有方法(函数)的化, 一定要进行 方法(函数)的制作。
E. 如果父类中有子类,则该子类不能使用父类的相关东西。(问题比较少见)
F. 如果要使用变量,请尽量避免其变量名与任何已有的类名重复
③例子
A. 类实际写法
假设现在需要一个能够计算加法的类,可以这样写:
AddNeed={
An=alloc;
An.Add=null;
An->{
Add=(a,b)=>{
A+B;
}
};
An;
}
写完后回车,这个类就完工了,
B. 类的实例化
类的实例化是指将制作好的类导入到外部变量中的过程,这里举个例子,就拿上面那个
AddNeed 类来说吧,这里起一个随便点的名字 test, 让 test=AddNeed, 然后回车,即可发 现有 unnamed 出现,证明这个类没有问题,现在,这个类就被实例化了。
C. 类的使用
制作好的类在被实例化后,可以发现之前被赋值的变量后面多了个”.”,这说明这个类可以 使用了,以上面那个为例子,我们输入 test. 后按下 tab 键可以发现立即补全了一个 Add,
此时立刻回车可以发现出现了(a,b)=>{A+B}, 这是我们之前类中所写的算法,现在可以通 过这种方式来直接查看。如果是有参函数的话,可以在函数名后面加”(参数)”后回车以得到 返回的结果,如果是无参函数,则直接回车即可得到返回的结果。
(7)标识符
标识符在 Thyme 中处于一个很不起眼的位置上,看似没有什么用,实际用处非常大, 接下来我们开始进行讲解。
①标识符是什么及标识符的作用
标识符是一种能够帮助区分“现在”跟“将来”的符号,它在 Thyme 中以“:=”出现, 其形式像“=”,但却不同于“=”,带有“:=”的变量、函数、类将以一种“将来”的形 式出现,而“=”是以“现在”的形式出现。
这里的“将来”是指该变量(函数、类)在以后会出现,而目前并不存在。
这里的“现在”是指该变量(函数、类)在当前已经存在,且以后也存在。
②例子
A. 假设我们目前没有 A 这个变量,现在我们需要对 A 进行声明,令 A:=100, 回车,此时 我们可以得到 A=100, 并且发现原来没有的 A, 现在已经有了。
B. 假设我们现在已经有了A 这个变量并且 A=100, 现在我们再对 A 进行声明,令
A:=200, 回车,此时我们可以发现,系统给出了一个"Variable "A"already declared in this scope” 的提示它的意思是说“变量A'已在此范围中声明”,这意味着同样一个变量 不能在同一个地方声明两次。同时我们可以发现在这句话后紧跟着一个数字200,现在我
们在来输入 A, 回车,可以得到 A=200。
综上,标识符能够创建新的变量(函数、类),并且可以将新建对象的值覆盖到已有 的对象上。
(8)结构
在 Thyme 中,结构是用来存储不同数据类型(数值,字符串,布尔值,函数,数组)的 一个项,它可以存在于任何地方,通常情况下,自定义结构在关闭 Algodoo 后会被自动清 除。
①自定义结构的书写形式
A. 临时型(可以随时添加新的条目) > 结 构 名 =alloc
>结构名.变量1= true
>结构名.变量2=14.1
>结构名.变量3=“BBAE”
B.类-型(可以在使用之前添加条目,在使用过程中依然可以添加新的条目(不建议)) 结构名={
结构名=alloc;
结构名.变量1=true;
结构名.变量2=13;
结构名.变量3="agc";
结构名;
}
②现有结构
A.Scene.my.变量名
B. 所有已存在类.变量名
由此我们可以看出,结构其实就是一个简单的类,通常情况下,结构的稳定性相较类 而言,稳定性较差,在写代码时应尽量减少结构的出现。
(9)数组
数组的表现形式通常以方括号的形式出现在我们面前,它的形式如同集合,里面由一 个一个的元素组成,然而里面的元素不同,带来的这个集合的性质也就不同,接下来将介 绍几种 Thyme 中的数组形式。
①数组的几种形式
A.普通数组
普通数组,是一种由普通的数据(字符串,数值,布尔值)构成的数组。
数组=[数据1,数据2,数据3, ……,数据 n] 例:
A=[1,2,3,4];
B=[True,False,True,False];
C=[“abc”,"bcd”,"efg"]
D=[1,true,"abcDefg"]
B.变量数组
变量数组,是一种由变量构成的数组,该数组元素的值取决于变量值,这种数组往往 需要依靠一个持续执行的函数(update 或 postStep 类的函数)来进行实时更新。
数组=[变量1,变量2,变量3, ……,变量 n] 例:
A=[Sim.frequency,Sim.windAngle]
C.方法数组
方法数组,指由方法(函数)构成的数组,该数组的元素既不是任何形式的数值,也不 是变量,而是一个又一个的算法,在使用方法数组前需要将数组的元素提取出来然后才能 使用该元素所包含的方法。
数组=[{方法1},{方法2},{方法3}……,{方法 n}] 例:
A=[{C=A+B},{C=A-B},{C=A*B},{C=A/B}]
D.交错数组
交错数组,指的是由数组构成的数组,因该数组的元素是由数组构成的,故在原始数 组的基础上增加了数组的容量。
数组=[[数组1],[数组2],[数组3], ……,[数组4]]
Thyme 脚本基础教程v1.0 Algodoo 贴吧团队制作
例:
A=[
[1,2,3,4],
[“abc","def","ghi”,"jkl"], [true,false],
[{c=a+b},{c=a-b}] ]
②数组元素的访问方式
A. 非交错数组
非交错数组的元素访问形式通常以“数组名”+“(序号)”的形式进行访问,在访问数 组时序号只能在0~N-1 上进行取值其中N 代表元素个数。
例:
>A=[51,11,74,23,8457,1];
>B=A(O)
B=51
>A=["abc","def","ghi","jkl"];
>B=A(3)
B=jkl
B. 交错数组
交错数组的元素访问形式是以非交错数组为基础,在此情况上以多个序号相连来访问 数组中数组的元素,一般情况下,交错数组中元素的访问容易产生混乱,使用时请务必注 意。
例:
>A=[[[1,2,3],2,3,4],["abc","def","ghi","jkl"],[true,false],[{a+b},{a-b}]] >B=A(O)(0)(2)
B=3
③方法数组的使用方式
方法数组在使用时不同于其他数组,方法数组在使用时需要先将元素提取出来,然后 才能使用方法数组中的元素。
例子:
>D=10;B=20
>A=[{D+B},{D-B},{D*B},{D/B}] >C=A(O)
C=30
Algodoo 贴吧专属 13 不可商用,违者必究
(10) 指针
在 Thyme 中,与一个变量相连的另外一个变量被称作该变量的指针,指针变量通常可 以被用来读取另外一个变量的值,同样的,指针变量也可以将指向的变量进行值的修改。
指针变量={指向变量} 例:
>A=1
>B={A+1} B=2
>A=2 B=3
(11) .phz 和 .phn 文件
①.phz 文件(可通过各种压缩软件打开查看)
Algodoo 通常以.phz 形式保存场景和元件,然而我们将它拆开来仔细查看,可以发现
它是一个特别的压缩文件我们所保存的所有Algodoo 场景和元件在.phz 中一般以三个文
件表示,它们是 thumb.png (存档缩率图)、scene.phn(存档本体)、checksums.txt(存档序号码), 这三个文件,除此之外,后来放入的其他文件, Algodoo 将不会自动读取。
②.phn 文件(可通过各种非word 文本编辑软件进行编辑)
在打开的.phz 中,一定存在一个.phn 文件,该文件是这个存档的核心部分。我们用记 事本打开来查看,可以发现这里面是用 Thyme 语言书写的,在这里面添加或删除相关数据, 均会影响存档打开后的情况具体修改还请遵守Thyme 语言的相关语法规范。
(12) Thyme 额外知识点
①什么是“->”
它是一个重定向符号,用于将当前值定向到另一个结构里。
例:
在控制台中输入 Scene->{my->{内容}}并回车,此时,重定向括号内内容的值将会覆盖 掉 Scene.my 内已有内容的值。
现在键入以下例子变量并回车:
Scene.my.Variable1=1;
Scene.my.Variable2=0;
Scene.my.Variable3=3;
Scene->{
my->{
Variable1=6;
Variable2=2;
Variable3=4
}
};
//得到的结果如下:
Scene.my.Variable1=6;
Scene.my.Variable2=2;
Scene.my.Variable3=4
重定向在需要进行大量修改时,可以节省大量的输入时间。
② 注 释
注释是一种特殊的文字,在 thyme 语言中,被注释的文字将不会被计算机所读取,此 特性可以用来书写与代码有关的解释。
A. “//”可以注释一行字
B.“/**/” 将文字放在两个“*”中间便可以注释相关文字。
③字符串扩展
我们都知道,一成不变的字符串变量是不可能满足我们所有需求的,当我们需要将原 始字符串进行加长时,我们可以用“+”来将两个字符串合并到一起,这样,一个新的字符 串将出现在我们面前(注意Thyme 没有字符剔除功能)
例子:
>A="aaa"
>A=A+“bbb”
A=“aaabbb”
④触发器和更新器
A. 触发器
触发器在 Algodoo 中只存在于实体上,它们往往在满足一定条件时才会执行它们所包 含的代码。
OnKey 在按下按键时触发
OnCollide 在碰撞时触发
OnSpawn 在该实体生成于场景中时触发
OnHitByLaser 实体被镭射笔击中时触发(实体特有)
OnClick 在点击该实体时触发
OnDie 在该实体消失时触发
OnLaserHit 镭射笔击中实体后触发(镭射笔特有)
Thyme 脚本基础教程 v1.0 Algodoo贴吧团队制作
B. 更新器
更新器在 Algodoo 中只存在于实体上,它们往往在系统运行后就会执行它们所包含的 代码 。
postStep 按下运行按钮后的每一帧都在执行,与拟真运行按钮的状态有关
Update 程序启动后的每一帧都在执行,与拟真运行按钮的状态无关
⑤何时使用分号
Thyme 语言中分号的使用时机比较灵活,如果只有 一 行语句则该语句后可以不加分号,
但若是有多行语句,则除了最后 一 行可以考虑加分号以外,其余行都必须添加分号。
2. 进阶部分
(1)对象指针(此功能 BUG 太多故暂不包含例子)
对象指针是 一 种特殊的指针,它指向的不是 一 个数值,而是 一 个 algodoo 场景中存在 的,能够被选中的物体,我们利用指针变量可以从其他地方对该物体的相关属性值进行修 改 。
对象指针往往包含以下两部分:
实体绑定部分(将其放于实体的触发器或更新器中并替换“(e)=>{}”):
(参数)=>{充当该实体的变量={参数}}
需要注意的是,对象指针需要指向一个实体(像几何体,镭射笔等),如果指向的是一 个非实体则将会出现错误。
访问部分:
充当该实体的变量 .this.
(2)扩展型 for
在基础部分我们提到了for 循环而在Thyme 语 言 中 for 的循环是利用迭代原理实现 的,在日常使用时往往会造成很多不便(如堆栈溢出),所以在这我们可以利用扩展结构无
限制增大循环的次数,以实现我们想要的任何结果。
用法举例:
Test=(a,r,c)=>{
C<r?{a(c)}:{};
(c+1)<r?{a(c+1)}:{};
(c+2)<r?{a(c+2)}:{};
0
Algodoo 贴吧专属 16 不可商用,违者必究
Thyme 脚本基础教程 v1.0 Algodoo 贴吧团队制作
(c+(N-1))<r?{a(c+(N-1)}:{};
(c+N)<r?{Test(a,r,(N))}:{}
}
例子中每增加一行代码意味着增加一倍的循环次数上限。
其中:
a 代表“(自变量)=>{每次循环都要执行的代码}”;
r代表循环次数上限
c 代表循环次数下限;
在这个方法中,实际循环次数 n 需要用 r-c 来代替并且 r 要大于c, 否则该方法将不 会执行。
(3)更新链接(自身变量锁定)
有些时候在 Algodoo 中保存的东西可能会因为某些原因而丢失掉数据,此时就需要引 入更新链接对会丢失数据的变量进行锁定,以便于以后的再次使用,这对于弹簧、轴承和 推进器十分有用。
用法举例:
物体上暂时不需要修改的属性(像 opaqueBorders 、dampingFactor 等属性)={ 物体上想要保留的属性={
内容
};
暂时不需要修改的属性的值
}
(4)数组元素追加
在前面的基础部分我们提到过数组,而数组中的元素个数为定值。 一般情况下,固定 元素个数的数组对我们来说基本够用,可是一旦出现特殊情况,那么这种数组将不会再满 足我们的使用,这时候就可以使用“++”对数组元素个数进行追加,以改变数组的大小。
用法举例:
数组 A= 数组 A++ 数组 B 例:
>A=[1,2,3]
>B=[4,5]
>A=A++B
A=[1,2,3,4,5]
Algodoo 贴吧专属 17 不可商用,违者必究
(5)局部变量声明
局部变量在 Thyme 中非常有用,它的出现能够防止函数或实体中的值泄露到根域中, 保证了数据的安全性。
①函数中的局部变量
在基础部分中我们讲到过函数,函数一般是由各种算法构成的,它们在执行的时候通 常需要执行计算。 一个函数中如果经常使用全局变量,将会导致这个函数的值泄漏到函数 外面,造成数据的混乱,所以我们在此引入局部变量。
用法举例:
测试函数={
局部变量:=15;
全局变量 A=全局变量A+局部变量; }
这个例子就是运用了局部变量对全局变量的控制,使得全局变量 A 在每次执行该函数 时都会自动增加15。
②实体中的局部变量
实体中的局部变量如同实体的属性一样,此内容将会在“物体的脚本选单”部分进行 讲解,在此我们不会进行讲解。
(6)对象评估
该系列比较特别,它们均有一个共性,那便是具有一个字符串形式的参数。 ①Reflection.executeCode
该代码的作用是将已存在的代码进行执行并输出结果。
例:
A. 计算一个字符串中的数据
Reflection.executeCode("50+2"), 结果52 减Reflection.executeCode("50-2"), 结果48
Reflection.executeCode(“50*2”), 结果100 除 Reflection.executeCode(“50/2”), 结果25
取模Reflection.executeCode("50%2"), 结果0
幂运算: Reflection.executeCode(“50^2”),结果2500 与Reflection.executeCode("true&&false"), 结果false 或Reflection.executeCode("true||false"), 结果true 非Reflection.executeCode("!true"), 结果false
B. 计算多个字符串的相关联(只能用加号相关联)数据
Reflection.executeCode(“50+2"+"50+2”),结果50+250+2=302
Reflection.executeCode 的作用除了可以计算单一字符串的功能外,还可以计算多个字 符串合并之后的值。当 Reflection.executeCode 的括号中有两个以上的字符串时,则需要将 它们用“+”连接到一起。当两个字符串中均有数字需要运算时, Reflection.executeCode将 首先会将多个字符串合并,然后计算合并之后的值。
C. 执行一个字符串中所包含的代码
>A={b+c} >b=1
>c=2
>Reflection.executeCode("a"), 结果为3
②Reflection.executeFile
该代码的作用是将已存在的文件进行读取执行并输出结果,特别的一点是它可以从外 部读取外部文件中已存在的数据到 Algodoo 中 。
例:三种读取文件的方式
A.从 Algodoo 根目录读取文件
写法Reflection.executeFile(“ 文件名.扩展名”)
B.从 Algodoo 目录下的相对路径读取文件
写法Reflection.executeFile(“\\文件夹名\\文件名.扩展名”)
C.从绝对路径读取文件
写法Reflection.executeFile(“盘符:\文件夹名\\文件名.扩展名”)
读取文件的类型:.txt.cfg .ini 等文本形式文件
③eval
该代码的作用是将已存在的代码进行执行并输出结果,同 Reflection.executeCode, 但 是作用范围不同, eval的作用范围可大可小而 Reflection.executeCode的范围目前仅仅只 能在[ROOT] 域中使用。