在libgdx游戏中
我想触摸然后拖动某处,然后在释放(touchUp)上根据目标身体的距离和方向施加方向力。当你触地得分时,目标身体保持静止,然后在触摸时沿着所需的轨迹施加力。
(非常类似于愤怒的小鸟 - 当你拿着弹弓的时候,你可以看到目标身体的虚线轨迹 - 我想做同样的事情)
所以我猜这可能不是最困难的事情但是给了一些选项我倾向于使用MouseJointDef但它立即施加力(即目标立即移动 - 我希望它保持静止然后一旦触摸事件发生然后应用力)
最简单的绘制轨迹的方法是什么?我也使用Box2D。
答案 0 :(得分:7)
创建一个继承InputAdapter
类的类,然后创建它的实例并注册它以监听触摸输入。
Gdx.input.setInputProcessor(inputAdapter);
有三种方法可以处理您必须覆盖的触摸事件touch_down
,touch_dragged
和touch_up
。
在touch_down
中,检查触摸位置是否在鸟类区域。如果是,请将布尔标志设为true。
在touch_dragged
中,检查上面的标志,如果是,则计算触摸位置相对于鸟类拍摄中心的距离和拍摄角度。
在touch_up
中,您可以通过调用
body2shoot.applyLinearImpulse(impulse, body2shoot.getWorldCenter());
无需MouseJointDef
移动body2shoot
。只需将body2shoot
的变换设置为在每个渲染周期中拖动的触摸位置。
为了计算轨迹,我写了一个这样的类:
public class ProjectileEquation
{
public float gravity;
public Vector2 startVelocity = new Vector2();
public Vector2 startPoint = new Vector2();
public ProjectileEquation()
{ }
public float getX(float t)
{
return startVelocity.x*t + startPoint.x;
}
public float getY(float t)
{
return 0.5f*gravity*t*t + startVelocity.y*t + startPoint.y;
}
}
为了绘制它,我只需设置startPoint
和startVelocity
,然后在循环中逐渐增加t
(时间)并调用getX(t)
和{{1 }}