Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX-摄影机缩放不起作用_Java_Camera_Libgdx_Viewport_Scaling - Fatal编程技术网

Java LibGDX-摄影机缩放不起作用

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

我对LibGDX有问题。我正在尝试创建一个应用程序,为了便于使用,我希望以固定分辨率(1920x1080)绘制所有内容

为此,我尝试创建一个
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();
    }
}