Algodoo脚本进阶教程
此教程有关再Algodoo用脚本代码实现更复杂的功能,不适合新手!
Algodoo脚本新手入门可以看:https://tieba.baidu.com/p/8445647943
或者@灰安教主写的教程:

1、对象指针
使用对象指针可以远程操纵一个物体,实现方式:
变量 = {e} (在onSpawn、postStep等函数里用)
之后用 变量.this.xxx 就可以访问这个物体的xxx属性
例:
onSpawn= (e)=>{
Scene.my.marble = {e}
}
那么这个物体生成的时候就会将自己绑定到Scene.my.marble这个变量上。
示例图:


2、Reflection.execudeCode()和eval()
这两个函数都是将字符串当成代码执行,但是它们的作用域不同:
Reflection.execudeCode是在全局域执行,eval是在局部域执行。
例:
eval("scene.my.a" + (2*3+1)+ " = " + 114);
相当于执行代码 scene.my.a7 = 114;
3、数组
众所周知,Algodoo中的列表(list)是不能像其他编程语言的数组那样修改单个元素的,例如pos = [1 , 1] 可以执行,但是 pos(0) = 1 不行。
不过我们也有其它方法来实现可以单点修改的数组:
用a1,a2,······,an来储存长度为n的数组a的各个元素。
再添加以下函数
就可以用scene.my.get("a"+i) 访问的值,
用scene.my.assign("a"+i, x) 将赋值为x。
4、扩展for循环
algodoo自带的for循环是这样的:

可以看到是用递归来实现的,效率会比较低,而且循环次数n还不能太大(70以上就不行了),否则会导致栈溢出。
我们可以改用下面这个for函数:
这个for函数的运行速度比Algodoo自带的快得多,而且由于递归层数少( 层),循环次数可以很大。
code是带有一个参数的函数,这个参数是循环变量,从s取到e。
示例:


求1+2+3+······+10000
5、隐藏GUI:
在某个物体的update函数写上:
就可以在运行的时候隐藏GUI。
附:我现在使用的一些自定义函数:
如果还有其他的不知道怎么用Algodoo脚本实现的功能,可以在评论区提问,我会在文章中加上。