我已经在谷歌和本网站周围搜索了关于此问题的信息,但无法解决..
我是游戏开发和LibGDX的新手,无法找到解释如何将游戏移植到各种屏幕尺寸的解决方案。
你能帮助我吗?
感谢名单
答案 0 :(得分:4)
使用最新的libgdx版本时,您将找到Viewport类......
视口描述了屏幕坐标系的变换(左下角为0,0的像素,例如右上角的1280,768(取决于设备))到坐标系的变换你的游戏和场景。
Viewport类在如何进行转换方面有不同的可能性。它可以拉伸您的场景坐标系统以完全适合屏幕坐标系统,这可能会改变纵横比,例如" stretch"你的图像或按钮。
还可以将具有宽高比的场景视口放入视口中,这可能会产生黑色边框。例如。当您为4:3屏幕开发游戏并将其嵌入16:10显示时。
(在我看来)最佳选择是通过匹配最长边或最短边来将场景视口拟合到屏幕中。
这样,您可以拥有从(0,0)到(1280,768)的屏幕/窗口坐标系,并在横向模式下创建可以从(0,0)到(16,10)的游戏坐标系。当匹配最长边时,这意味着屏幕的左下角将是(0,0),右下角将是(16,0)...在不具有相同宽高比的设备上,上角的y值可能略有不同。
或者当匹配最短边时,这意味着您的场景坐标将始终显示为(x,0)到(x,10)......但是右边缘可能不完全具有x值和x值16,因为设备决议不同......
使用该方法时,您可能需要重新定位某些按钮或UI元素,当它们应该在顶部或右边缘呈现时...
希望它有所帮助...
答案 1 :(得分:1)
一旦我也遇到了这个问题,但最后我得到了工作解决方案,用于在libgdx中使用SpriteBatch或Stage绘制任何东西。使用正交相机,我们可以做到这一点。
首先选择一个最适合游戏的恒定分辨率。在这里,我拍摄了1280 * 720(风景)。
class ScreenTest implements Screen{
final float appWidth = 1280, screenWidth = Gdx.graphics.getWidth();
final float appHeight = 720, screenHeight = Gdx.graphics.getHeight();
OrthographicCamera camera;
SpriteBatch batch;
Stage stage;
Texture img1;
Image img2;
public ScreenTest(){
camera = new OrthographicCamera();
camera.setToOrtho(false, appWidth, appHeight);
batch = new SpriteBatch();
batch.setProjectionMatrix(camera.combined);
img1 = new Texture("your_image1.png");
img2 = new Image(new Texture("your_image2.png"));
img2.setPosition(0, 0); // drawing from (0,0)
stage = new Stage(new StretchViewport(appWidth, appHeight, camera));
stage.addActor(img2);
}
@Override
public void render(float delta) {
batch.begin();
batch.draw(img, 0, 0);
batch.end();
stage.act();
stage.act(delta);
stage.draw();
// Also You can get touch input according to your Screen.
if (Gdx.input.isTouched()) {
System.out.println(" X " + Gdx.input.getX()
* (appWidth / screenWidth));
System.out.println(" Y " + Gdx.input.getY()
* (appHeight / screenHeight));
}
}
//
:
:
//
}

以任何类型的分辨率运行此代码,它将在该分辨率下进行调整而不会受到任何干扰。