这与Libgdx有关。 我开发的游戏在逻辑上是正确的。
问题: 当游戏在PC上运行时它看起来很好(FPS 61) 但是当在Android上运行时(FPS从47到30不断下降)(注5)它很慢并且冻结并在一段时间后关闭(屏幕上出现太多东西)
问题(最有可能) 我没先在游戏中使用相机或视口。(这会让游戏在手机上停一会儿而不是电脑)
后来我把相机和视口放在游戏中,但是后视口在高分辨率屏幕上显示的游戏场景太少(我使用1280x720用于视口和相机),现在游戏没有挂起或冻结但是场景很少可见
所有res设备的视口和摄像机设置应该是什么?(欢迎示例)
提前感谢任何建议
答案 0 :(得分:1)
FitViewport,将宽高比保持scaling the world
以适应屏幕,为剩余空间添加黑条(信箱),因此始终保持适合您的viewPort的常数对象。
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,因为它通过向一个方向扩展世界来保持世界宽高比而没有黑条。
答案 1 :(得分:0)
终于解决了。问题是我正在将相机和视口分辨率设置为Gdx.Graphics.getHeight()和width()......它们获得了设备的高度和宽度。
这是问题的主要原因。
我需要做的是将相机和视口分辨率设置为virtualResolutions(自己想要的高度x宽度),就像@Abhishek指出的那样。 修复此问题后,PC和Android设备都显示相同的屏幕但是
Android设备上的FPS从45降到30并且游戏运行缓慢。(虽然PC和移动设备显示相同数量的纹理)我使用ExtendViewport
有关于此的任何建议吗?
解决方案:只使用一个SpriteBatch无关紧要(因为我使用了多个错误因此滞后)