【问题标题】:Viewports and pixel sprites - libgdx视口和像素精灵 - libgdx
【发布时间】:2015-05-05 18:43:09
【问题描述】:

我是 libgdx 的新手,我遇到了一个大问题。 我正在使用像素精灵开发游戏,它们在我的手机上看起来不错,但如果我在另一部手机上测试游戏,精灵看起来非常拉伸和糟糕。

我已经测试了视口,但我没有让它按我想要的方式工作。我想做的事情是让我的精灵在每部手机上看起来都很好。唯一看起来像我想要的那样工作的视口是 FillViewport,但是当我使用这个视口时,我无法将相机移动到左下角位置,当我在 0,0 位置绘制精灵时,它们出现在屏幕中间。另外,我也将使用带有像素图块的平铺地图,我遇到了同样的问题......我已经花了几天时间在这方面工作,但我认为是时候寻求帮助了,因为我无法让它工作我自己

请问有什么帮助或提示吗?

这是我的实际代码

@Override
public void show () {
    batch = new SpriteBatch();
    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();

    camera = new OrthographicCamera();
    viewport = new FillViewport(320,480,camera);
    viewport.apply();
    camera.position.set(camera.viewportWidth/2,camera.viewportHeight/2,0);

    tiledMap = new TmxMapLoader().load("TESTMAP.tmx");
    tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap);

    img = new Texture("badlogic.jpg");
}

@Override
public void render(float delta) {
   // Gdx.gl.glClearColor(193 / 255f, 208 / 255f, 160 / 255f, 1);
    Gdx.gl.glClearColor(1,1,1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    camera.update();

    tiledMapRenderer.setView(camera);
    tiledMapRenderer.render();

    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    batch.draw(img,0, 0);
    //batch.draw(pad, player.x, -40);
    batch.end();

}

@Override
public void resize(int width, int height) {
    viewport.update(width,height);
    camera.position.set(camera.viewportWidth/2, camera.viewportHeight/2, 0);

}

【问题讨论】:

  • 欢迎来到 Stack Overflow!能否请您出示您的代码,以便我们查看您已经尝试过的内容?
  • 我已经用我当前的代码更新了问题:)

标签: android libgdx viewport pixel


【解决方案1】:

FillViewport 是唯一裁剪部分世界视图(相机看到的)的视口,因此像您一样将相机置于世界视图的中心并不一定会将 0,0 放在屏幕的左下方。

我认为您可能想要 ExtendViewport 代替。

我想不出FillViewport 值得麻烦的情况,因为您总是会与您的某些游戏在某些设备上被裁剪掉的情况作斗争。但如果必须,您可以通过执行以下操作调整裁剪以在底角获得 0,0:

camera.position.set(
    viewport.getWorldWidth()/2 + (float)viewport.getScreenX()/(float)viewport.getScreenWidth()*viewport.getWorldWidth(),
    viewport.getWorldHeight()/2 + (float)viewport.getScreenY()/(float)viewport.getScreenHeight()*viewport.getWorldHeight(),
    0);

如您所见,FillViewport 使用起来很麻烦。

顺便说一句,无需在show 方法中应用您的视口或更新您的相机,因为无论如何您都是在resize 中进行的。

【讨论】:

  • 不错!现在运行良好!我已经测试了 ExtendViewport,但 FillViewport 对我来说似乎更好。非常感谢您对我的帮助!
【解决方案2】:

您可能希望像这样声明它,而不是那样声明您的相机

    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();
    cam = new OrthographicCamera(30, 30 * (h / w));
    cam.position.set(cam.viewportWidth / 2f, cam.viewportHeight / 2f, 0);
    cam.update();

这不会拉伸您的图像,您还可以实现相机移动

阅读更多here

【讨论】:

  • 感谢您的回复,但我需要的是有关视口的帮助 ^^
  • @Danichu 我知道我写的是关于相机的。我的一款游戏也遇到了同样的问题,但我解决了我写的问题。所以为你的原始项目做一个备份,试试我的代码。如果它不起作用,请告诉我。
  • 嗯,你是对的,我也可以用那个代码解决问题!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-08-27
  • 2014-10-11
  • 2015-07-21
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多