2017-02-10 18 views
0

私はプラットフォームとカメラがプレーヤーを追跡する単純なbox2d世界を持っています。私は画面の一面に触れるときにタッチ入力コントロールを取得しようとしていますが、それは私が思うより複雑です。時々画面をタッチするとボックスが動きますが、私が期待している場所にたどり着いたときには決して動かず、私が触れるところを描くことによってデバッグしようとすると、もっと混乱するだけです。ここlibgdxとbox2d、画面のタッチ座標は無意味です

public void resize(int width, int height) { 
    camera.setToOrtho(false, width/2, height/2); 
} 

カメラ更新

public void cameraUpdate(float delta){ 
    Vector3 position = camera.position; 
    position.x = player.getPosition().x * PPM; 
    position.y = player.getPosition().y * PPM; 
    camera.position.set(position); 

    camera.update(); 
} 
のサイズを変更する方法

public void render() { 
    update(Gdx.graphics.getDeltaTime()); 

    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    b2dr.render(world, camera.combined.scl(PPM)); 
} 

をレンダリングする方法

public void create() { 
    float w = Gdx.graphics.getWidth(); 
    float h = Gdx.graphics.getHeight(); 

    Gdx.input.setInputProcessor(new MyInputProcessor()); 

    camera = new OrthographicCamera(); 
    camera.setToOrtho(false, w/2, h/2); 

    touchpos = new Vector3(); 

    world = new World(new Vector2(0, -9.8f), false); 
    b2dr = new Box2DDebugRenderer(); 
    player = createBox(8, 10, 32, 32, false); 
    platform = createBox(0, 0, 64, 32, true); 
} 

を作成するカメラを持つすべてのコードがありますか

を聞いて触れます

タッチ入力方法と数学

@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
    touchpos.set(screenX, screenY, 0); 
    camera.unproject(touchpos); 

    if (touchpos.x > 500){ 
     touchleft = true; 
    } 
    else touchleft = false; 

    if (touchpos.x < 300){ 
     touchright = true; 
    } 
    else touchright = false; 

    if (300 < touchpos.x && touchpos.x < 500){ 
     touchcenter = true; 
    } 
    else touchcenter = false; 

    return true; 
} 

私は常に同じになるように制御するために使用する領域が、それのdidnをしたいと、それはカメラいじりせずに生のタッチ値を使用するのと同じくらい簡単であるべきだと思います」私はgoogleに行って、投げ飛ばされて、カメラで他の手探りをしてみましたが、タッチは決して働いていませんでした。

私は答えが簡単であるように感じる。私は必要なのは、それは、画面の左または右にタッチを検出したときに多くの経験を持つ人は、私がスーパー

答えて

1

SCLをいただければと思いますエラーを見ることができれば、それは本当

に適切な変数を設定することです()はMatrix4(camera.combined)の値を変換するので、camera.combinedをスケールしないでください。

float w = Gdx.graphics.getWidth(); 
float h = Gdx.graphics.getHeight(); 
camera = new OrthographicCamera(30, 30 * (h/w)); 

public void render() { 
    update(Gdx.graphics.getDeltaTime()); 

    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    b2dr.render(world, camera.combined); 
} 

あなたはとても大まかないあなただけの30で次元をBOX2Dスケール画像を描きたい場合は10

より大きいと0.1と10メートル、間を移動する物体の大きさをキープ物理学で作業しようとしています次元をピクセル単位で取得します。

タッチの場合、デバイスの幅と高さに応じてビューポートを設定し、定義済みの値に条件を適用します。

@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
    touchpos.set(screenX, screenY, 0); 
    camera.unproject(touchpos); 

    if (touchpos.x > camera.viewportWidth*.8f){ 
     touchleft = true; 
    } 
    else touchleft = false; 

    if (touchpos.x < camera.viewportWidth*.2f){ 
     touchright = true; 
    } 
    else touchright = false; 

    if (camera.viewportWidth*.2f< touchpos.x && touchpos.x < camera.viewportWidth*.8f){ 
     touchcenter = true; 
    } 
    else touchcenter = false; 

    return true; 
} 
関連する問題