【发布时间】:2014-06-04 12:16:55
【问题描述】:
我已经花了几天时间试图解决这个问题,我快要发疯了。非常感谢您的帮助。
我在 libgdx 中使用 2D 舞台。我想用“重力”显示效果将演员(或精灵)移动到这个舞台:例如演员1,他的初始坐标是(0, 0),目标坐标是(100, 50),我想移动这个演员到这个目的地具有重力轨迹效果。然后我想使用相同的重力让 actor2 从 (0, 0) 移动到 (25, 75),然后让 actor3 从 (0, 0) 移动到 (200, 75) 等等。
我设法根据这个众所周知的循环将重力轨迹应用于任何演员:
setX(getX() + velocity.x);
setY(getY() + velocity.y);
velocity.y += getGravity().y * delta;
因此,调整重力值会修改轨迹。它工作正常。 现在,正如我之前所说,我想给每个演员一个独特的轨迹,给他们预定的目的地。
所以我试图找到一个公式来确定每个演员在他们轨迹的每一帧上的 x 和 y 我正在使用以下静态参数:
gravity.y : 所有演员都一样 延迟:每个演员在他的初始坐标和他的目标坐标之间移动的帧数。所有演员的价值也相同
首先我用这个我绝对不引以为豪的 SUPER UGLY 公式计算速度:
velocity = new Vector2 ( (destinationx - b.getX() )/time, initdisty/time + ( Math.sqrt(delta*1000)*time / ( 500/Math.abs(gravity) ) ));
其中 delta = Gdx.graphics.getDeltaTime();
然后我在每一帧应用这个速度来计算每个演员的 x 和 y:
public void act(float delta){
for (int i=0; i<delay; i++) {
setX(getX() + velocity.x);
setY(getY() + velocity.y);
velocity.y += gravity.y * delta;
}
}
它有点工作,但当然,这不可能是一个长期的解决方案。为每个演员计算每帧的 x 和 y(可能有 5-6 个演员同时移动)看起来一点也不好看。 主要问题是轨迹在计算机上运行良好,60FPS 一致,在平板电脑上还可以,但在内存有限且 30
在阅读了几篇博文后,我似乎可以通过从公式中删除 delta 参数来避免多设备内存 fps 问题,但我还没有找到方法。而且它仍然没有给我一个强有力的长期解决方案来计算具有预定目的地坐标的轨迹。
感谢您的阅读和您的宝贵时间,如果不清楚,请告诉我,我会尽力解释得更好。
【问题讨论】:
-
只是为了确保:您有一个具有已知起始位置的特定对象,并且您想计算给它的初始速度,以便该对象在已知时间段后位于另一个已知位置?这一切都是在物体受到重力影响的时候发生的?
-
@sashoalm:好的,谢谢,我删除了标签
-
@goncalopp:确实,这就是我的意思