2016-11-03 6 views
0

現在、宇宙船を持つ小惑星を避けなければならない小さなゲームでプログラミングしています。 FitViewportを使ってすべてのデバイスに同じように見えるようにする。残念ながら、Viewportsを使用すると、サイズ変更時に座標がちょっと消えてしまいます。最初に、クラス図を見て全体の外観を改善してください。FitViewportを使用すると座標がオフになります

これを修正するには(クラスDiagrammがObjectAidを使用して作成された)

enter image description here

私は宇宙船のクラスのupdate()メソッドでviewport.unproject()メソッドを実装する必要があります。 宇宙船クラス:

public void update() 
{ 

    if (Gdx.input.isTouched()) 
    { 

     y = MyGdxGame.HEIGHT - Gdx.input.getY(); 
     x = Gdx.input.getX(); 
     sprite.setPosition(x, y); 

    } 
} 

ビューポートはGameScreenClassにのみavalibleであるので、私はちょうど更新方法で書く傾けます。 GameScreenは次のようになります:

@Override 
public void render(SpriteBatch batch) 
{ 
    // TODO Auto-generated method stub 

    cam.update(); 
    batch.setProjectionMatrix(cam.combined); 
    batch.begin(); 
    em.render(batch); 
    [...] 

} 

私はGameScreenClassにホールコードを入れたくありません。 Viewportパラメータでupdateメソッドを作成しようとしましたが、白い画面が表示されました。どのように私はこの問題を解決できる別の方法はありますか?ここで私のプロジェクトを完全に見ることができます。 (https://github.com/Zui0per/SpaceAvoiding/tree/master/tmp

ありがとうございました!

答えて

1

解決策は、おそらく、メインクラスのタッチ座標をアンプロジェクトし、パラメータとして未投影のxとyをさまざまなupdate()メソッドに渡すことです。たとえば、宇宙船に:

public void update(float unprojectedX, float unprojectedY) { 
    if (Gdx.input.isTouched()) { 
     sprite.setPosition(unprojectedX, unprojectedY); 
    } 
} 

)あなたが各クラスで複数のレンダリングとunprojectメソッドを持っているので、それは、あなたのコードを追跡するのは難しいが、あなたはタッチ座標をunprojectとEntityManager.update(にそれらを渡す必要がありますメソッドを使用して、それらを子に渡すことができます。

関連する問題