level 1



调整角量来修改旋转速度min半径为椭圆最小半径,max半径为椭圆最大半径
数学没学过椭圆,我也不清楚是否写的标准,但至少效果有了
pen的代码只是用来表示移动路径,可以删掉
碰到先生成的星球就消失,这个有两种办法:
1.若角色名为<a>,检测碰到<a>就删除此克隆体即可,这个办法最简便,但是问题在于太局限了。不管先后,只要两个该角色碰撞,则两方都会被删除。
2.双向克隆体的数据交互。
定义克隆体变量(仅适用于当前角色)<编号>,定义列表<数据列表>,初始化时设置为1并清空数据列表,每次生成克隆体则+1并在数据列表中加入3项空的值(项目数取决于你要发送的数据项目量,此处发送编号,x,y即可),同时重复执行不断将:
<数据列表>的第 编号*3+1 项 替换为 编号
<数据列表>的第 编号*3+2 项 替换为 x坐标
<数据列表>的第 编号*3
+3
项 替换为 y坐标
同时遍历列表每三项,用d=根号下[(x1-x2)^2+(y1-y2)^2]来计算距离,只要目标的编号低于自己的编号即代表它属于先生成的星球,如果与目标距离还<d’(这个值你可以自己设定,就是星球之间碰撞的最大距离值)则删除后生成的星球
删除操作:将以上的重复执行代码替换的值全部修改为空,此处只需要遍历时针对数据都是空的列表项跳过即可
最后,
上述解决方案都有一个问题,受限于帧率,过快运动的星球很难互相碰撞。
此时2方法就有一个解决方案:将发送的数据项更改为5,后两项将下一帧的坐标发送
来自大佬simple617(链接内容为它小号)提供了一个式子可以计算在该时间内的最小距离
https://aerfaying.com/Projects/834033
该作品中有进行详细解释,我就不说了。
当然,受限于1方法的不可扩展性,1方法无法解决这个问题。