使用FitViewport时协调关闭

时间:2016-11-03 13:21:46

标签: java android libgdx

我目前在一个小游戏上编程,你必须避免使用太空船的小行星。使用FitViewport在每个设备上保持游戏外观相同。不幸的是,通过使用视口,调整大小时我的坐标会有点偏差。首先看一下Class Diagramm,以获得更好的整体外观。

enter image description here

(Class Diagramm是使用ObjectAid创建的)

要解决此问题,我需要在Spaceship类的update()方法中实现viewport.unproject()方法。 宇宙飞船课程:

public void update() 
{

    if (Gdx.input.isTouched()) 
    {

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

    }
}

Viewport只能在GameScreenClass中使用,所以我不能写入更新方法。 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参数创建更新方法,但我只是一个白色的屏幕。还有另一种方法可以解决这个问题吗?在这里,您可以全面了解我的项目。 (https://github.com/Zui0per/SpaceAvoiding/tree/master/tmp

提前致谢!

1 个答案:

答案 0 :(得分:1)

解决方案可能是取消主类中的触摸坐标,并将未投影的x和y作为参数传递给各种update()方法。例如在宇宙飞船:

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

很难跟踪你的代码,因为你在每个类中都有多个render和unproject方法,但你需要取消对触摸坐标的投影并将它们传递给EntityManager.update()方法,它可以将它们传递给它的孩子。