gpt4 book ai didi

java - 使用 FitViewport 时坐标关闭

转载 作者:行者123 更新时间:2023-12-01 09:17:52 24 4
gpt4 key购买 nike

我目前正在编写一个小游戏,你必须用宇宙飞船避开小行星。为了让游戏在每台设备上看起来都一样,我使用了 FitViewport。不幸的是,通过使用视口(viewport),我的坐标在调整大小时会有点偏离。首先看一下类图以获得更好的整体外观。

enter image description here

(类图是使用 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 中可用,因此我不能只在更新方法中写入。游戏屏幕如下所示:

 @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 )

提前致谢!

最佳答案

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

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

很难遵循您的代码,因为每个类中有多个渲染和取消投影方法,但是您需要取消投影触摸坐标并将它们传递到 EntityManager.update() 方法中,并且它可以将这些传递给它的 child 。

关于java - 使用 FitViewport 时坐标关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40402595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com