自制小球淘汰赛教程(一)物体的属性
我制作了一个50球标准末位淘汰赛模板,后面的教程都在这基础上讲解。
模板下载地址:
链接:https://pan.baidu.com/s/1lLy5baKifP2rUXCg7nY4bg?pwd=qj0s 提取码:qj0s
不一定要完全按照教程来,你可以自己创新。
提前打个预防针,本教程适用于没有代码基础的新手,尽量不使用专业术语。
杠精勿入,因为以前遇到过在无关紧要的地方抬杠的奇葩人士,有强迫症的大佬请绕道,别来萌新这里纠正“这个说法不专业”“这个明明叫做xxx”。
。
。
一、准备工作
到algodoo官方网站,www.algodoo.com下载并安装algodoo软件。
然后,先看官方新手教程,至少把软件基本操作搞明白。
怎么画圆形,怎么删除,怎么移动,工具栏每个工具是干什么的,这些基础操作我不教,自己看官方自带教程,很简单的。如果这些都搞不清楚,那你估计不适合做球赛。
很多选项看字面意思就行了,不做解释,比如“删除”“绘画旋转标记”。

二、物体属性
选中一个物体,并点击右键,就可以修改这个物体的各种属性了。
按住ctrl键再点击鼠标左键,可以同时选择多个物体。
选中物体后,再滑动鼠标滚轮,能把这个物体的图层(z轴)移到最上方或最下方。
在空白的地方点右键可以改背景颜色。

【液化所选物件】变成液体,不建议使用。
【spongify】变成果冻状软体,实际上是很多个用轴承连接起来的几何体,不建议使用。
【选取】同时选中多个物体后,可以点“设为同一群组(编组)”,这样以后只要点其中一个物体,就能选中这一组的物体。
选取列表中有个“物件跟随”,打勾后,视角会自动跟着这个物体移动,可用来做关卡切换。一个场景只能有一个物件跟随。
【外观】
H(色相),决定这个颜色属于哪个色系,范围是0~360。
个人设定:0°红色,30°橙色,60°黄色,90°黄绿,120°酸橙,150°翡翠,180°青色,210°天蓝,240°蓝色,270°紫色,300°品红,330°玫瑰。

S(彩度),数值越低这个颜色越浅。
比如,把蓝色的S值改成50%,就变成了长春花。

V(明度),数值越低这个颜色越暗。
比如,把蓝色的V值改成50%,就变成了海军蓝。

羽化边缘,下图是圆形羽化之后的效果,我用来当做传送点。羽化边缘只改变外观,不影响其他属性。

纹理就是贴图,点“寻找纹理”就能给这个物体添加贴图了。
【文本】
方形才有这个选项,可以输入文本。
【材质】

密度:一般情况下,使用默认的2就行。修改密度后,质量会自动更新。
摩擦力:障碍物的摩擦力一般也不用改。小球的摩擦力设置为0,可以大幅降低(穿墙/原地摆烂/扎堆卡在狭窄的地方)等发生的概率。如果你就想要小球穿墙,摩擦力就用默认的0.5。
弹性:小球弹性一般是0.5。障碍物的弹性自己根据关卡设置来调整就行。弹性建议别弄得太大,否则小球速度太快非常容易穿墙。
引力:一般不用;需要引力的关卡,自己看情况设置数值。引力可以是负数,负引力相当于排斥力。
杀手和设为不灭:如果一个物体被设为了杀手,那么其他物体只要碰到了杀手,就会立刻消失;拥有不灭属性的物体则免疫杀手。杀手请谨慎设定。
【碰撞作用层】
总共十个碰撞作用层。
如果两个物体有至少一个相同的碰撞作用层,那么这两个物体相遇时就会发生碰撞作用,否则就互相当对方不存在。
比如,物体甲的碰撞层是AB,物体乙AC,物体丙CD;甲乙有共同碰撞层A,相遇时就会碰撞;甲丙没有共同碰撞层,相遇时就会无视对方。
可与液体碰撞就是字面意思(不建议在algodoo中加入液体,特别卡)。
无自身碰撞:如果两个物体的碰撞层完全相同,并且都勾选了无自身碰撞,那这两个物体相遇时就不会发生碰撞作用。
【几何行为】
黏附到背景:粘在背景上不动。
松开:取消黏附。
彼此黏附:同时选中多个物体时,让这些物体黏附在一起。
添加循迹追踪器:就是小球的尾迹。
其他的选项也都是字面意思。
【快捷控制键】
点对应的位置就能设置快捷键,在需要按键操作时可设置。
三、script脚本选单
右键一个物体,点击最下方的script脚本选单就能进入了。

左上角的黑色空文本框是物体控制台,以后会经常用到,这里先跳过。
这个界面看着很复杂,其实只要知道这些英文单词是什么意思,就很简单了。
有很多属性跟前面右键菜单是一样的,两边数值会同步变化,在右键修改和脚本选单修改都行。
注意,修改数值时,如果搞不清楚,一定要保持原本的格式。比如[0,0]只能改成其他二项数组,不能改成单个数字或true。
常见的类型:
数值:包括整数和小数(浮点数),一般没啥区别,需要区别时再做说明。数值可以写∞。
字符串:就是文字,需要加上“”。
布尔变量:就是yes或no,只能在“true”和“false”之间更改。
数组:用方括号[ ]表示。
(e)=>{ ] 写代码的地方,后面再详细说明。
【collideSet】跟碰撞作用层选项同步更新,范围是0~1023。每个整数对应一种碰撞层组合,0表示全部层都没勾选,1023则是ABCDEFGHIJ全部勾选。
【color】用RGB表示的物体颜色,前三个数值是RGB,第四个是透明度,范围都是0~1。
【colorHSVA】用HSVA表示的物体颜色,跟外观选项的H(色相)S(彩度)V(明度)A(透明度)是一样的。H范围0~360,另外三个范围0~1
以上两种颜色表示方法选择其中一种就行,个人习惯用HSVA。
你可能会看到0.199999999,56.000000027等数值,这个是计算机误差造成的,其实就是0.2和56。
【materialname】物体名字。双引号必须要留着!空的双引号表示没有名字。
比如,你想给一个球取名cyan,请在这一栏输入“cyan”。(当然algodoo无法直接输入中文,请从其他地方复制粘贴过来。)
【各种写了(e)=>{}的东西】写代码用的,后面再详细解释。
【pos】位置坐标。直接改pos数值与直接鼠标移动物体效果是一样的。
【radius】半径。圆形才有这个属性。
【size】长和宽。方形才有这个属性。
【timetolive】存活倒计时。默认是∞,即永远存活;设置为任意正数,开始模拟之后就倒计时,归零之后这个物体就消失。
【vel】瞬时速度。会动态更新。第一个数是x轴方向的速度,第二个数是y轴方向的速度,正数是右和上,负数是左和下。
其他属性(我从来没用过的属性就不做介绍了):
【adhension】粘附力,默认是0。用得比较少,如果想整花活,可以改粘附力。
设置为正数,可以让这个物体具有“胶水”特性。两个物体碰撞时,它们的粘附力之和越大,就越容易粘在一起。
粘附力可以是负数,负粘附力的情况下,只要两个物体碰到,就会立刻离开对方。
【airFrictionMult】空气摩擦力系数,默认是1。用得比较少。
【angle】物体的角度,用弧度制表示,范围是-π到π。改angle数值与用工具栏的旋转工具效果是一样的,只不过直接改angle数值更精确。
【angvel】角速度。静止的物体角速度为0,正数表示逆时针旋转,负数表示顺时针旋转。
【area】面积。不能直接修改数值。通过缩放工具等使物体面积变化后,area数值自动更新。
【attraction】引力。跟材质界面的引力是一样的。
【attractionType】引力类型。1是线性,2是平方。
【body】表示粘附关系,无法直接改数值。Body=0表示粘附到背景,两个body相同的物体就是彼此粘附的。
(这个属性是bug制造机,因为无法自己修改body的数值,在经常使用生成物体代码时,很容易导致两个不相干的物体莫名其妙Body相同,就粘在了一起。)
【collidewater】是否与液体碰撞。
【density】密度。如果把密度设置为∞,这个物体就会待在原地一动不动,其他东西撞也撞不动,达成跟“粘附到背景”一样的效果。
(如果你要在一个物体上写大量代码,建议不要粘附到背景,用密度 = ∞能达成一样的效果,运行会流畅很多。)
【drawBorder】是否绘画物体边框。
【drawCake】是否绘画旋转标记。
【edgeBlur】羽化边缘的数值。
【friction】摩擦力
【geomID】几何ID,不可以修改。每个几何体的geomID都是不重复的,可用geomID来追踪特定物体。不过比较坑的地方是,geomID无法自己修改,而且geomID还会动态变化,场上物体消失/产生新物体都可能导致geomID变化。
【entityID】实体ID,跟geomID作用一样,只不过所有东西(包括几何体、激光、轴承、尾迹等)都有entityID,而geomID只有几何体才有。
【heteroCollide】是否无自身碰撞。true表示“无自身碰撞”,false表示“有自身碰撞”即碰撞作用层选项那里不勾选无自身碰撞。
【immortal】是否不灭。如果是true,就不会被杀手杀掉。
【inertiaMultiplier】惯性常数,默认是1。数值越大,惯性越大。
【killer】是不是杀手。如果是true,只要碰到的东西没有不灭属性,就会让对方消失。
【opaqueBorders】透明状态下是否显示边框。
【restitution】弹性。
【text】方形专有属性,矩形文本框。双引号内的文字会显示在矩形上。
【textColor】文字颜色,格式为RGBA。
【textConstrained】文字是否限制在矩形框内。如果是true,文字会自动调整大小,使得所有字都在矩形内;如果是false,文字即便超出矩形框,也不会自动改变大小。
【textFont】字体。
【textFontSize】字体解析度,数值越大越清晰。建议别设置得太大,别超过128,否则特别卡。
【textScale】文字大小。
【texture】贴图文件位置。
【textureMatrix】调整贴图缩放大小。
【zDepth】z轴深度,数值大的物体图层在上方。建议别直接改zDepth数值,要改图层请使用鼠标左键选中+鼠标滚轮。
四、轴承
如果要给一个物体添加轴承,首先请让它松开,别粘附在背景,也别跟远方的其他东西彼此粘附。
轴承必须依附于实体,如果轴承中心没有物体,那轴承就会消失。
你可以用工具栏的轴承按钮,手动在任意位置添加轴承;也可以右键物体——几何形为——在中心添加轴承。

轴承起到部分固定作用,把物体在轴承中心的那个点与背景/同位置的其他物体连接。
【马达】如果不勾选,那物体就不会自转,受重力/碰撞等影响才会转动。
如果勾选,那物体就会匀速自转。
对应脚本选单的motor。
【自动刹闸】我没用过,感兴趣的可以自己测试。对应脚本选单的autoBrake。
【反转】默认是顺时针旋转,勾选“反转”就变成逆时针。
对应脚本选单的ccw。
【马达速度】自转速度,数值越大转速越快;负数表示反方向转动,
对应脚本选单的motorSpeed
【马达力矩】数值越大,才能支撑更高的马达速度。如果想使物体自转不受外界影响,请把马达力矩设置成∞或很大的数值。
如果马达力矩较小,会出现以下效果:这个物体太重了,马达力矩太小了,实在带不动,转不起来;物体自转时撞到很重的东西或固定的墙壁,然后就卡住不转了。
对应脚本选单的motorTorque
【轴承破坏冲力上限】默认是∞。如果不是∞,那转速过快时轴承就会坏掉,然后物体就飞走了。
对应脚本选单的impulseLimit。
轴承脚本选单的其他属性:
【distanceLimit】轴承偏离轴心点距离限制。如果不是∞,偏离距离超过时,轴承就会坏掉。
匀速转动的物体通用模板:画一个普通的不粘附到背景的物体,在想自转的中心位置点一个轴承,马达打勾,设置转速,力矩输入9999999(随便输个大数字),想逆时针旋转就勾选反转。
如果想实现类似地球绕太阳公转的效果,可以这样做:
首先用上面的方法做一个自转的圆形,然后在旁边画你想要公转的物体,选中这两个物体并彼此粘附,大功告成!
。
。
第一章先讲到这里,了解以上物体属性后,你可以尝试画一些拥有不同属性的静止障碍物,还有匀速转动的障碍物。
比如把障碍物弹性设置成0,速度多快的球碰到之后都会瞬间“冷静”下来;
给终点设置轻微的引力,使得路过的球会被倾向于奔向终点。
然后利用我分享的模板,你就可以尝试做一些简单的关卡了。
发挥想象力,做出新奇的关卡吧。
不要光看教程文字,多多动手尝试,才能知道实际效果。
第二章准备讲各种有(e)= > { }的代码,还有常用的math函数(主要是三角函数)。