2016-08-04 5 views
0

現在、あなたが宇宙船を動かし、小惑星を避けようとしているゲームでiamをプログラミングしています。宇宙船は、ユーザがそれに触れるときに移動し、ユーザの指の動きに従わなければならない。私が今抱えている問題は、ユーザが画面をタッチすることで宇宙船をテレポートすることができるということですAndroid/Libgdxこの問題を解決するにはどうすればよいですか?

if (Gdx.input.isTouched()) { 

    x = Gdx.input.getX() - width/2; 
    y = -Gdx.input.getY() + height/2; 

} 

: 宇宙船はでarroundの移動スプライトです。どうすればこの問題を解決できますか?タッチ領域を設定することは可能ですか?

+0

まず、ユーザーが画面に触れると、画面に触れる位置が宇宙船であるかどうかを確認します。何もしていない場合は、動きに従います –

答えて

2

船からタッチポイントまでの単位ベクトルの方向を計算し、それに速度を掛けます。あなたは、カメラで投影しないことによって、タッチ座標をワールド座標に変換する必要があります。

private static final float SHIP_MAX_SPEED = 50f; //units per second 
private final Vector2 tmpVec2 = new Vector2(); 
private final Vector3 tmpVec3 = new Vector3(); 

//... 

if (Gdx.input.isTouched()) { 
    camera.unproject(tmpVec3.set(Gdx.input.getX(), Gdx.input.getY(), 0)); //touch point to world coordinate system. 
    tmpVec2.set(tmpVec3.x, tmpVec3.y).sub(x, y); //vector from ship to touch point 
    float maxDistance = SHIP_MAX_SPEED * Gdx.graphics.getDeltaTime(); //max distance ship can move this frame 
    if (tmpVec2.len() <= maxDistance) { 
     x = tmpVec3.x; 
     y = tmpVec3.y; 
    } else { 
     tmpVec2.nor().scl(maxDistance); //reduce vector to max distance length 
     x += tmpVec2.x; 
     y += tmpVec2.y; 
    } 
} 
関連する問題