Libgdx:移动身体远离触摸事件

时间:2015-01-15 20:17:25

标签: java android libgdx

我想让一个物体远离触碰事件的位置。

到目前为止,我有以下内容:

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    Vector3 touchPosition = new Vector3();

    camera.unproject(touchPosition.set(screenX, screenY, 0));

    Vector2 directionBody = body.getPosition();

    Vector2 directionTouch = new Vector2(touchPosition.x, touchPosition.y); 

    Vector2 direction = directionBody.sub(directionTouch);

    direction.nor();

    float speed = 3;
    body.setLinearVelocity(direction.scl(speed));

    return true;
}

使用此代码,如果我按屏幕右侧,身体向左移动。如果按屏幕左侧,则机身将向右侧移动。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

你的代码对我来说有点模糊,也许是因为你使用的课程我没有,但一般来说很简单:

  1. 首先,将触摸坐标取消投影到屏幕坐标系,您的身体对象就像您一样。

  2. 第二个计算触摸位置和身体对象之间的水平和垂直距离。假设你得到dx和dy。

  3. 如果你想要恒定的速度,你只需检查那些dx和dy是正还是负,并根据你设定的正或负速度,即:

    if(dx> 0)vx = SPEED_CONSTANT;

    其他vx = -SPEED_CONSTANT;

  4. 垂直速度也一样。

    1. 如果你想让你的身体加速你应该使用那些dx和dy乘以一些常数。也就是说,dx越大,垂直速度就越高。垂直速度也是如此:

      vx = dx * SPEED_CONSTANT;

      vy = dy * SPEED_SONSTANT;

    2. 如果你想让你的身体减速,那么你应该用那些dx和dy设定一些恒定值,以产生相反的效果:

      vx = SPEED_CONSTANT / dx;

      vy = SPEED_CONSTANT / dy;

    3. 这样的事情。您可以通过尝试某些值来设置该SPEED_CONSTANT的值 - 将其调整。

      我希望这会有所帮助。

答案 1 :(得分:0)

所以我终于做到了。

代码段:

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {

    Vector3 touchPosition3D = new Vector3();

    //Change touch coordinates to world coordinates
    camera.unproject(touchPosition3D.set(screenX, screenY, 0));

    //Add unit factor to the vector
    touchPosition3D.x = Utility.convertToMeter(touchPosition3D.x);
    touchPosition3D.y = Utility.convertToMeter(touchPosition3D.y);

    Vector3 bodyPosition = new Vector3(body.getPosition().x, body.getPosition().y, 0 );

    Vector3 finalVector = new Vector3(bodyPosition.x, bodyPosition.y, 0).sub(touchPosition3D);

    Vector2 direction = new Vector2(finalVector.x, finalVector.y);

    float speed = 3;
    body.setLinearVelocity(direction.scl(speed));

    return true;
}

基本上我不得不取消触摸touchDown坐标并将它们转换为我在我的应用程序中使用的单位。 然后我做一个简单的矢量操作,减去我身体矢量的计算触摸矢量。 最后应用一些线速度。