Libgdx 每个视口都充当stretchviewport
我有一个视口和摄影机设置,但每当我渲染时,视口就充当一个StretchViewport并填充整个屏幕,而不是保持纵横比并添加黑条。有人知道我做错了什么,或者如何修复它吗 我在GameScreen类中获得了以下代码,用于设置摄影机和视口:Libgdx 每个视口都充当stretchviewport,libgdx,Libgdx,我有一个视口和摄影机设置,但每当我渲染时,视口就充当一个StretchViewport并填充整个屏幕,而不是保持纵横比并添加黑条。有人知道我做错了什么,或者如何修复它吗 我在GameScreen类中获得了以下代码,用于设置摄影机和视口: private static final int VIRTUAL_WIDTH = 468; private static final int VIRTUAL_HEIGHT = 293; private OrthographicCamera camera; pr
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添加了黑色条纹。请显示您的屏幕截图并解释错误原因