2016-03-22 15 views
0

libgdxにタイルマップがあり、私のクラスにGestureDetectorパンメソッドを実装しています。Libgdx GestureDetectorパンメソッドは、デバイスの速度が遅く/高速です

私がしたいのは、ユーザーがパン方向にドラッグすると、ユーザーがタイルマップを指で動かしているようなものです。

私のデスクトップでコードをテストすると、ドラッグは完全にうまく、マップは完璧な速度と滑らかさでドラッグされます。

しかし、私は別のアンドロイドデバイスで同じコードをテストすると、のドラッグが遅すぎるか、または速すぎます。小さな指の動きによって、画面全体が地図を移動することがあります。

どのようにすべてのデバイスで一貫したパンメソッドを作成できますか?私のコード:

public class SinglePlayerGame extends GestureDetector.GestureAdapter implements Screen{ 

private TiledMap map; 
private OrthogonalTiledMapRenderer mapRenderer; 
private OrthographicCamera camera; 
private Viewport viewport; 
private Main game; 

public SinglePlayerGame(Main game){ 
    this.game = game; 
    this.camera = new OrthographicCamera(); 
    this.viewport = new StretchViewport(Main.VIRTUAL_WIDTH, Main.VIRTUAL_HEIGHT, camera); 
    this.map = new TmxMapLoader().load("map_1.tmx"); 
    this.mapRenderer = new OrthogonalTiledMapRenderer(map); 
    this.camera.position.set(viewport.getWorldWidth()/2, viewport.getWorldHeight()/2, 0); 

    Gdx.input.setInputProcessor(new GestureDetector(this)); 

    resize(Main.VIRTUAL_WIDTH, Main.VIRTUAL_HEIGHT); 
} 

public boolean pan(float x, float y, float deltaX, float deltaY){ 
    camera.translate(-deltaX, deltaY); 
    camera.update(); 
    return false; 
} 

@Override 
public void render(float delta){ 
    update(); 
    game.batch.setProjectionMatrix(camera.combined); 
    game.batch.begin(); 
    game.batch.end(); 

    mapRenderer.render(); 
} 

public void update(){ 
    camera.update(); 
    mapRenderer.setView(camera); 
} 

@Override 
public void resize(int width, int height){ 
    viewport.update(width, height); 
} 

public void show(){} 
public void pause(){} 
public void resume(){} 
public void hide(){} 

@Override 
public void dispose(){ 

} 

答えて

0

GestureDetector単位画面ピクセルであるので、あなたがあなたのカメラとビューポートによって定義されるように、あなたの世界単位にそれらをスケールする必要があります。

public boolean pan(float x, float y, float deltaX, float deltaY){ 
    float scaleX = viewport.getWorldWidth()/(float)viewport.getScreenWidth(); 
    float scaleY = viewport.getWorldHeight()/(float)viewport.getScreenHeight(); 
    camera.translate((int)(-deltaX * scaleX), (int)(deltaY * scaleY)); 
    camera.update(); 
    return false; 
} 
関連する問題