(LibGdx) 屏幕视口问题
(LibGdx) Screen viewport issue
这与 Libgdx 有关。
我正在开发一款逻辑上正确的游戏。
问题:
在 PC 上玩游戏 运行s 时看起来不错 (FPS 61)
但是当 运行 在 android 上时(FPS 从 47 到 30 不断下降)(注 5)它非常慢并且在一段时间后冻结并关闭(屏幕上出现太多东西)
问题(很有可能)
我没有先在游戏中使用相机或视口。(这使得游戏在 phone 但不是 pc 上挂了一段时间)
后来我在游戏中放置了摄像头和视口,但是视口在高分辨率屏幕上显示的游戏场景太少(我为视口和摄像头使用了 1280x720),现在游戏不会挂起或冻结,但可以看到的场景非常少
所有 res 设备的视口和相机设置应该是什么?(欢迎提供示例)
提前感谢您的任何建议
FitViewport,将宽高比保持 scaling the world
以适合屏幕,为剩余的 space 添加黑条(黑边),因此适合的对象数量始终恒定你的视口。
public class GdxTest extends ApplicationAdapter{
private FitViewport fitViewport;
private SpriteBatch spriteBatch;
private OrthographicCamera camera;
private float virtualWidth=640,virtualHeight=400;
private Texture texture,bg;
private Sprite Sprite;
@Override
public void create() {
spriteBatch=new SpriteBatch();
camera=new OrthographicCamera();
fitViewport=new FitViewport(virtualWidth,virtualHeight,camera);
texture=new Texture("badlogic.jpg"); // having dimension of 256 X 256
bg=new Texture("pixel.png");
Sprite=new Sprite(bg);
Sprite.setColor(Color.GOLD);
Sprite.setSize(virtualWidth,virtualHeight);
}
@Override
public void render() {
Gdx.gl.glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
spriteBatch.setProjectionMatrix(camera.combined);
spriteBatch.begin();
Sprite.draw(spriteBatch);
spriteBatch.draw(texture,0,0);
spriteBatch.end();
}
@Override
public void resize(int width, int height) {
fitViewport.update(width, height,true);
}
@Override
public void dispose() {
spriteBatch.dispose();
texture.dispose();
bg.dispose();
}
}
我会推荐 ExtendViewprot 使用,因为它通过在一个方向上扩展世界来保持世界纵横比没有黑条。
终于解决了。问题是我将相机和视口分辨率设置为 Gdx.Graphics.getHeight() 和 width()... 这得到了设备的高度和宽度。
因此是问题的主要原因。
我需要做的是像@Abhishek 指出的那样将相机和视口分辨率设置为 virtualResolutions(自己想要的高度 x 宽度)。
修复此问题后,PC 和 android 设备显示相同的屏幕,但
android 设备上的 FPS 从 45 下降到 30,游戏运行缓慢。(尽管 PC 和移动设备显示相同数量的纹理)我正在使用 ExtendViewport
有什么建议吗?
解决方案:不管怎样都只使用一个 SpriteBatch(我错误地使用了多个 SpriteBatch,因此滞后)
这与 Libgdx 有关。 我正在开发一款逻辑上正确的游戏。
问题: 在 PC 上玩游戏 运行s 时看起来不错 (FPS 61) 但是当 运行 在 android 上时(FPS 从 47 到 30 不断下降)(注 5)它非常慢并且在一段时间后冻结并关闭(屏幕上出现太多东西)
问题(很有可能) 我没有先在游戏中使用相机或视口。(这使得游戏在 phone 但不是 pc 上挂了一段时间)
后来我在游戏中放置了摄像头和视口,但是视口在高分辨率屏幕上显示的游戏场景太少(我为视口和摄像头使用了 1280x720),现在游戏不会挂起或冻结,但可以看到的场景非常少
所有 res 设备的视口和相机设置应该是什么?(欢迎提供示例)
提前感谢您的任何建议
FitViewport,将宽高比保持 scaling the world
以适合屏幕,为剩余的 space 添加黑条(黑边),因此适合的对象数量始终恒定你的视口。
public class GdxTest extends ApplicationAdapter{
private FitViewport fitViewport;
private SpriteBatch spriteBatch;
private OrthographicCamera camera;
private float virtualWidth=640,virtualHeight=400;
private Texture texture,bg;
private Sprite Sprite;
@Override
public void create() {
spriteBatch=new SpriteBatch();
camera=new OrthographicCamera();
fitViewport=new FitViewport(virtualWidth,virtualHeight,camera);
texture=new Texture("badlogic.jpg"); // having dimension of 256 X 256
bg=new Texture("pixel.png");
Sprite=new Sprite(bg);
Sprite.setColor(Color.GOLD);
Sprite.setSize(virtualWidth,virtualHeight);
}
@Override
public void render() {
Gdx.gl.glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
spriteBatch.setProjectionMatrix(camera.combined);
spriteBatch.begin();
Sprite.draw(spriteBatch);
spriteBatch.draw(texture,0,0);
spriteBatch.end();
}
@Override
public void resize(int width, int height) {
fitViewport.update(width, height,true);
}
@Override
public void dispose() {
spriteBatch.dispose();
texture.dispose();
bg.dispose();
}
}
我会推荐 ExtendViewprot 使用,因为它通过在一个方向上扩展世界来保持世界纵横比没有黑条。
终于解决了。问题是我将相机和视口分辨率设置为 Gdx.Graphics.getHeight() 和 width()... 这得到了设备的高度和宽度。
因此是问题的主要原因。
我需要做的是像@Abhishek 指出的那样将相机和视口分辨率设置为 virtualResolutions(自己想要的高度 x 宽度)。 修复此问题后,PC 和 android 设备显示相同的屏幕,但
android 设备上的 FPS 从 45 下降到 30,游戏运行缓慢。(尽管 PC 和移动设备显示相同数量的纹理)我正在使用 ExtendViewport
有什么建议吗?
解决方案:不管怎样都只使用一个 SpriteBatch(我错误地使用了多个 SpriteBatch,因此滞后)