统一';Java中的s-Mathf.PingPong
我试图在java中创建Unity的Mathf.PingPong的实现。(Mathf.PingPong参考:docs.unity3d.com/ScriptReference/Mathf.PingPong.html)。到目前为止,我已经创建了一个简单的版本,但是它使用了统一';Java中的s-Mathf.PingPong,java,unity3d,Java,Unity3d,我试图在java中创建Unity的Mathf.PingPong的实现。(Mathf.PingPong参考:docs.unity3d.com/ScriptReference/Mathf.PingPong.html)。到目前为止,我已经创建了一个简单的版本,但是它使用了sin()函数,因此速度慢且流畅 到目前为止,我所拥有的: public float pingpong(float max, float dist) { return lerp(0, max, sin(radians((max/d
sin()
函数,因此速度慢且流畅
到目前为止,我所拥有的:
public float pingpong(float max, float dist) {
return lerp(0, max, sin(radians((max/dist)*360.0))/2.0+0.5);
}
这a)不起作用,它无法对值进行乒乓,b)使用sin()返回值
注:
我使用的库添加了简化的函数,比如sin()和radians()好的,我自己找到了,据我所知,它工作得非常完美。这是:
public float pingpong(float start, float stop, float dist) {
float d = stop-start;
if ((int)(Math.abs(dist)/d) % 2 == 0) {
return start + Math.abs(dist)%d;
} else {
return stop - Math.abs(dist)%d;
}
}
我从Unity的版本中稍微修改了它,所以它可以有一个起始值。需要注意的一点是dist
是距离起点的距离(即,如果起点为5,而你想打乒乓球的距离为8,则距离为3)。它也适用于负数和浮点数。需要注意的一点是,如果start
和stop
是相同的,它将给出一个除以0的错误