Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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
Libgdx 每个视口都充当stretchviewport_Libgdx - Fatal编程技术网

Libgdx 每个视口都充当stretchviewport

Libgdx 每个视口都充当stretchviewport,libgdx,Libgdx,我有一个视口和摄影机设置,但每当我渲染时,视口就充当一个StretchViewport并填充整个屏幕,而不是保持纵横比并添加黑条。有人知道我做错了什么,或者如何修复它吗 我在GameScreen类中获得了以下代码,用于设置摄影机和视口: private static final int VIRTUAL_WIDTH = 468; private static final int VIRTUAL_HEIGHT = 293; private OrthographicCamera camera; pr

我有一个视口和摄影机设置,但每当我渲染时,视口就充当一个StretchViewport并填充整个屏幕,而不是保持纵横比并添加黑条。有人知道我做错了什么,或者如何修复它吗

我在GameScreen类中获得了以下代码,用于设置摄影机和视口:

private static final int VIRTUAL_WIDTH = 468;
private static final int VIRTUAL_HEIGHT = 293;

private OrthographicCamera camera;
private FitViewport viewport;

@Override
public void show() {
    camera = new OrthographicCamera();
    viewport = new FitViewport(VIRTUAL_WIDTH,VIRTUAL_HEIGHT,camera);
    viewport.apply();

    camera.position.set(camera.viewportWidth/2,camera.viewportHeight/2,0);
}

@Override
public void render(float delta) {
    camera.update();

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    // do drawing
    batch.end();
}

@Override
public void resize(int width, int height) {
    viewport.update(width,height);
    camera.position.set(camera.viewportWidth/2,camera.viewportHeight/2,0);
}
完整代码:

package com.Sidescroll.game;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.viewport.FitViewport;

public class GameScreen implements Screen {

    private static final int VIRTUAL_WIDTH = 468;
    private static final int VIRTUAL_HEIGHT = 293;

    private SpriteBatch batch;
    private BitmapFont font;

    private OrthographicCamera camera;
    private FitViewport viewport;
    private int deltaCount;
    private float deltaSum;
    private float fps;

    private Level level;
    private Player player;

    @Override
    public void show() {
        level = new Level();
        player = new Player(level.getSpawn());
        batch = new SpriteBatch();
        font = new BitmapFont();
        camera = new OrthographicCamera();
        viewport = new FitViewport(VIRTUAL_WIDTH,VIRTUAL_HEIGHT,camera);
        viewport.apply();
        System.out.println(camera.viewportWidth);
        camera.position.set(camera.viewportWidth/2,camera.viewportHeight/2,0);
    }

    @Override
    public void render(float delta) {
        camera.update();

        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        player.update(delta);

       deltaCount += 1;
       deltaSum += delta;

        if(deltaSum >= 1) {
            fps = 1/(deltaSum/deltaCount);

            deltaCount = 0;
            deltaSum = 0;
        }

        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        level.draw(batch, player);
        font.draw(batch, "FPS: " + fps, 0, 293);
        batch.end();
    }

    @Override
    public void resize(int width, int height) {
        viewport.update(width,height);
        camera.position.set(camera.viewportWidth/2,camera.viewportHeight/2,0);
    }

    @Override
    public void pause() {}

    @Override
    public void resume() {}

    @Override
    public void hide() {}

    @Override
    public void dispose() {
        font.dispose();
        batch.dispose();
        level.dispose();
    }

}

忘了在类扩展游戏中也调用resize

@Override
public void resize(int width, int height) {
    super.resize(width, height);
}

检查您的代码,它的行为是FitViewport not Fill:您确定它不能正常工作吗?我已经添加了一个纹理来渲染-其他的都是复制粘贴的代码看起来也非常好。应该按预期工作。好的,我添加了完整的代码,这有帮助吗?变化不大/added@m.antkowicz我添加了完整的代码,这有帮助吗?我通过将批处理传递给draw函数,然后简单地渲染纹理来绘制关卡和玩家,仍然可以完美地工作…:也许你期望从中得到一些别的东西,尽管它应该是有效的?请看-我只添加了一个纹理,但FitViewports添加了黑色条纹。请显示您的屏幕截图并解释错误原因