2015-01-15 48 views
0

我想要一个对象远离触摸事件的位置。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; 
} 

使用此代码,如果我按在身向左移动屏幕的右侧。如果在屏幕左侧按下,身体会移到右侧。有人可以帮我吗?

回答

1

你的代码是一个有点模糊对我来说,也许是因为你使用的类,我不,但通常很简单:

  1. 首先你unproject触摸坐标到屏幕坐标系,在那里你的身体对象,像你一样。

  2. 其次计算触摸位置和身体对象之间的水平和垂直距离。假设你得到DX和DY。

  3. 如果你想定速,你只需要检查那些dx和dy积极或消极的,并根据您设置正或负的速度,即:

    如果(DX> 0)VX = SPEED_CONSTANT;

    else vx = -SPEED_CONSTANT;

垂直速度也一样。

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

    vx = dx * SPEED_CONSTANT;

    vy = dy * SPEED_SONSTANT;

  2. 如果你想你的身体减速,那么你应该devide与dx和dy一些恒定值,有相反的效果:

    VX = SPEED_CONSTANT/DX;

    vy = SPEED_CONSTANT/dy;

就是这样的。你可以通过尝试一些值来设置SPEED_CONSTANT的值 - 调整它。

我希望这会有所帮助。

+0

非常感谢,我会仔细研究一下。 – Markus

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; 
} 

基本上我不得不unproject着陆坐标并将其转换为我用我的应用程序的单位。 然后我做一个简单的矢量操作,从我身体的矢量中减去计算出的触摸矢量。 最后应用一些线速度。