LibGDX解析独立性

时间:2014-04-04 00:56:35

标签: java android libgdx

我已经在谷歌和本网站周围搜索了关于此问题的信息,但无法解决..

我是游戏开发和LibGDX的新手,无法找到解释如何将游戏移植到各种屏幕尺寸的解决方案。

你能帮助我吗?

感谢名单

2 个答案:

答案 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));
	   }
	   
	}
  //
  : 
  :
  //
}




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