欢迎光临散文网 会员登陆 & 注册

Algodoo脚本进阶教程

2023-08-22 22:48 作者:ozkey__  | 我要投稿

此教程有关再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) 访问a_%7Bi%7D%20的值,

用scene.my.assign("a"+i, x) 将a_%7Bi%7D%20赋值为x。


4、扩展for循环

algodoo自带的for循环是这样的:


可以看到是用递归来实现的,效率会比较低,而且循环次数n还不能太大(70以上就不行了),否则会导致栈溢出。

我们可以改用下面这个for函数:

这个for函数的运行速度比Algodoo自带的快得多,而且由于递归层数少(%5Clceil%20%5Clog_2%20n%20%5Crceil%20%2B1  层),循环次数可以很大。

code是带有一个参数的函数,这个参数是循环变量,从s取到e。

示例:

求1+2+3+4+5

求1+2+3+······+10000


5、隐藏GUI:

在某个物体的update函数写上:

就可以在运行的时候隐藏GUI。


附:我现在使用的一些自定义函数:


如果还有其他的不知道怎么用Algodoo脚本实现的功能,可以在评论区提问,我会在文章中加上。

Algodoo脚本进阶教程的评论 (共 条)

分享到微博请遵守国家法律