Java LibGDX-摄影机缩放不起作用
我对LibGDX有问题。我正在尝试创建一个应用程序,为了便于使用,我希望以固定分辨率(1920x1080)绘制所有内容 为此,我尝试创建一个Java LibGDX-摄影机缩放不起作用,java,camera,libgdx,viewport,scaling,Java,Camera,Libgdx,Viewport,Scaling,我对LibGDX有问题。我正在尝试创建一个应用程序,为了便于使用,我希望以固定分辨率(1920x1080)绘制所有内容 为此,我尝试创建一个FitViewport和一个正交摄影机,以便视口始终适合屏幕大小,并且所有内容都自动缩放 在我的屏幕课程中,我创建了这样一个视口和一个摄影机: AbstractScreen() { camera = new OrthographicCamera(Constants.VIRTUAL_WIDTH, Constants.VIRTUAL_HEIGHT);
FitViewport
和一个正交摄影机
,以便视口始终适合屏幕大小,并且所有内容都自动缩放
在我的屏幕
课程中,我创建了这样一个视口和一个摄影机:
AbstractScreen() {
camera = new OrthographicCamera(Constants.VIRTUAL_WIDTH, Constants.VIRTUAL_HEIGHT);
viewport = new FitViewport(Constants.VIRTUAL_WIDTH, Constants.VIRTUAL_HEIGHT, camera);
}
(其中,VIRTUAL\u WIDTH
为1920,VIRTUAL\u HEIGHT
为1080)
现在,当我尝试渲染一个1920x1080px的图像时,只绘制了该图像的三分之一
以下是应该绘制的屏幕截图:
以下是应完全绘制的图像:
下面是实际的屏幕实现:
class LoadingScreen extends AbstractScreen {
private SpriteBatch spriteBatch;
private Texture texture;
@Override
public void show() {
super.show();
spriteBatch = new SpriteBatch();
texture = new Texture("textures/test.png");
}
@Override
public void render(float delta) {
super.render(delta);
spriteBatch.begin();
spriteBatch.draw(texture, 0, 0);
spriteBatch.end();
}
}
谢谢大家! 您的加载屏幕正在创建自己的名为
SpriteBatch
的SpriteBatch,它在AbstractScreen超类中隐藏了SpriteBatch
因此,您的LoadingScreen.render()
调用super.render()
,它在AbstractScreen.spriteBatch
中设置了适当的投影矩阵,但随后您将使用LoadingScreen.spriteBatch
进行绘制
因此,删除LoadingScreen中的spriteBatch
字段,不要在那里实例化它。将AbstractScreen中的spriteBatch
设置为受保护,以便可以从子类访问它
顺便说一句,SpriteBatch必须在
dispose()
中处理,否则会泄漏内存。更好的是,不要在屏幕中实例化SpriteBatch。在游戏中实例化一个SpriteBatch并将其传递给屏幕的构造函数,这样所有东西都可以共享同一个实例,而不是在每次切换屏幕时浪费时间处理和实例化新的实例。SpriteBatch是一个很重的东西。哦,哇,这总是最简单的错误。谢谢你的帮助和其他建议!
class LoadingScreen extends AbstractScreen {
private SpriteBatch spriteBatch;
private Texture texture;
@Override
public void show() {
super.show();
spriteBatch = new SpriteBatch();
texture = new Texture("textures/test.png");
}
@Override
public void render(float delta) {
super.render(delta);
spriteBatch.begin();
spriteBatch.draw(texture, 0, 0);
spriteBatch.end();
}
}