【问题标题】:libgdx optimal Height and Widthlibgdx 最佳高度和宽度
【发布时间】:2014-12-04 19:07:25
【问题描述】:

我在游戏中使用的高度和宽度是否重要?在我的游戏中,我有几个多边形,它们都连接到我绘制的图像,但是当我的宽度和高度为 800x480 时,我必须将图像绘制得非常小,这会导致它们变得模糊。另外,我真的不明白这在不同尺寸的手机屏幕上是如何表现的..,我画的图像是否被拉伸,或者它们是否保持小,即使在大平板电脑上?所以我的问题基本上是 libgdx 游戏的最佳宽度和高度是多少?

这是我的代码的一部分,也许可以帮助你理解我的意思

    WIDTH = Gdx.graphics.getWidth();
    HEIGHT = Gdx.graphics.getHeight();

    camera = new OrthographicCamera();
    camera.setToOrtho(false, 800, 480 );

如果我更改这些值会怎样?最好将它们更改为什么?

我正在阅读各种教程,但他们并没有真正谈论这部分。

我是否必须做一些复杂的事情才能让我绘制的图像在所有设备上看起来都不错?

编辑:

这就是我目前在我的游戏中实现云的方式:

public class AnotherScreen implements Screen{

Polygon cloudPoly;
Texture cloud;

    @Override
public void render(float delta) {

    batch.setProjectionMatrix(camera.combined);

    batch.begin();
    renderBackground();
    batch.draw(cloud,cloudPoly.getX(),cloudPoly.getY());
    batch.end();

    }

    @Override
public void show() {
    cloud = new Texture(Gdx.files.internal("assets/textures/cloud.png"));
            cloudPoly = new Polygon();
    cloudPoly.setPosition(MathUtils.random(350,600),MathUtils.random(380,440));

    // theses vertices are just a little square atm
    float[] cloudVertices = new float[] {
            0,0,
            0,20,
            20,20,
            20,0
    };
    cloudPoly.setVertices(cloudVertices);
    }

}

当我设置'camera.setToOrtho(false, 800, 480);'时,云图像的宽度为256p,高度为128p这朵云不会一直保持比例吗?

如果我不清楚,我很抱歉,我是一名新程序员,我的英语可能会更好,爱你和我在一起!

【问题讨论】:

  • 考虑为您的单位命名。 800x480 什么?米?英寸?哪些单位最适合您的游戏?
  • getWidthgetHeight 为您提供以像素为单位的屏幕尺寸。设置相机的宽度和高度可以设置您世界的可视区域,但单位可以是您喜欢的任何单位,就像 Xoppa 所说的那样。如果您使用的是 box2D,那么米是一个不错的选择。无论设备的大小和纵横比如何,您设置的 800x480 都会被拉伸以适合屏幕。因此,如果您只选择这样的固定值,它在某些设备上看起来会失真。查看处理此问题的 Viewports 上的 libgdx 文档。
  • 嗯好的,所以..我不应该使用固定值让它在所有设备上看起来都很好?我将阅读视口,但是,有没有办法向我展示如何不使用固定值的示例?如果我在 Photoshop 中制作 32x32 像素的图像,如何以正确的方式实现该图像?现在我只是导入它,如果尺寸不对我在photoshop中更改它,似乎是错误的

标签: java android libgdx


【解决方案1】:

我绘制的图像是否会被拉伸,或者即使在大平板电脑上它们仍然很小?

libgdx 的最大特点之一是它可以让您完全按照自己的意愿做事。所以,这真的是你的选择。有了这个sn-p

WIDTH = Gdx.graphics.getWidth();
HEIGHT = Gdx.graphics.getHeight();

camera = new OrthographicCamera();
camera.setToOrtho(false, WIDTH, HEIGHT);

在每个不同的屏幕尺寸下,您都会有不同的视口尺寸。所以你的图片会很小。

另一方面,如果您对视口使用预定义的值,例如:

WIDTH = 800;
HEIGHT = 480;

camera = new OrthographicCamera();
camera.setToOrtho(false, WIDTH, HEIGHT);

您会为每个屏幕获得相同的视口,并且图像会拉伸以在每个轴上占据相同的空间。对于每个轴,这不一定相同。因此,一个屏幕中的完美方形图像在另一个屏幕中可能看起来像一个具有不同 x-y 比率的矩形。

还有第三种选择,您可以固定一侧并计算另一侧,这样您就可以保持图像的比例(正方形保持正方形)。你必须决定什么是固定的一面。对于Super Mario Bros 这样的游戏,我建议你固定高度并计算宽度:

HEIGHT = 480;
WIDTH = (Gdx.graphics.getWidth()/Gdx.graphics.getHeight())*HEIGHT;

camera = new OrthographicCamera();
camera.setToOrtho(false, WIDTH, HEIGHT);

在游戏世界中,每个屏幕都会看到相同的高度。但是有些屏幕会比其他屏幕看到更多的宽度。如果这对您来说是个问题(您希望他们看到相同数量的世界,但也保持比例),那么在每一侧添加黑条是一种选择。

所以我的问题基本上是 libgdx 游戏的最佳宽度和高度是多少?

最佳解决方案是为多种分辨率设置一组不同的图像。并在运行时选择最合适的。但这会大大增加游戏的规模。

另一种肮脏的方式是只有一个大的集合,让图像在较低的分辨率下缩小。它看起来比反向更好。但是有些人认为这太脏了:p(不是我,所以我推荐它)。

【讨论】:

  • 但是您所说的“在每个不同的屏幕尺寸下都有不同的视口尺寸”,这听起来不错,但这并不意味着所有图片在所有屏幕上看起来都一样,或者仅仅是也许相反?
  • 意思相反。
  • 当我创建一个游戏时,我习惯于在我的脑海中选择以米为单位的大小。如果我希望能够在 x 中看到大约 80m,在 y 中看到 45m,我创建了一个视口为 80 和 45 的camera。然后我创建了对象,再次在我的脑海中使用米(人类的 fe 有一个大小2 in y,因为它大约 2m 高)。您认为这是错误的方式吗?
  • 不,这是一个好方法。 (实际上是我在答案中发布的第二个选项)。
  • @Lestat 谢谢!当我开始学习 libgdx 时,一个教程向我展示了,那是最好的方法之一,但我几乎从未见过有人这样做。即使使用box2d,他们也没有使用这种方法,而是使用metersToPixel和pixelsToMeter。这让我有点困惑 xD
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 2016-04-20
  • 1970-01-01
  • 2014-02-27
  • 2010-12-28
相关资源
最近更新 更多