【问题标题】:Libgdx supporting all Android Pixel DensitiesLibgdx 支持所有 Android 像素密度
【发布时间】:2014-03-26 05:03:20
【问题描述】:

我制作了一个 android/ios 游戏,它在我发布的唯一一款 Android 上运行良好,但我说我制作了 50 像素 x 50 像素的纹理渲染,其他设备上的像素密度使纹理渲染不同有什么方法可以吗?制作固定的世界坐标,使图像渲染相同,但不是以随机尺寸渲染纹理,而是缩小/放大

【问题讨论】:

  • 为此使用Camera。如果你使用的是最新的 libgdx 版本,你也可以使用ViewPort
  • @Springrbua 我正在使用纹理进行渲染会影响将事物绘制到屏幕上的方式吗?并且使用相机和视口会在实现时影响任何纹理定位,或者我可以在 ApplicationListener 类中实现它并且一切都会自动调整?另外我将如何实施呢?非常感谢您的帮助,我只是不想放弃我的游戏
  • 永不放弃,你总能学到新东西,这并不难。我写了一个关于相机的答案,但是对于视口,你必须自己看,因为我从未使用过它们,我仍然使用 9.9 版。
  • @Springrbua 我正在使用 libgdx 0.9.9 你有没有遇到过这个问题我一直在努力寻找解决方案好几天但我不能:(因为在我的手机上说每英寸都像 150像素,但如果我尝试在手机上绘制宽度为 150 像素的纹理,则在其他人的手机上它会更大,而在他们的手机上会更小。
  • 这对开发人员来说一直是个问题,而且它永远是个问题,但你可以用我在答案中写的方法更容易。

标签: libgdx render


【解决方案1】:

您可以像这样设置Camera

  1. new OrthographicCamera(viewPortWidth, viewPortHeight) 用于 2D 游戏
  2. new PerspectiveCamera(viewAngel, viewPortWidth, viewPortHeight) 用于 3D。

我现在仍然使用 2D。您设置的视口将自动放大以适应窗口/屏幕。因此,如果您在 1600 * 900 像素的窗口上使用 80 宽和 45 高的视口,每个单元都会放大到使用 20 像素。在 800*450px 的屏幕上,一个单元只用掉 10px。 默认情况下,相机的原点 (P(0,0)) 位于屏幕中间。所以如果你在 x = 0, y = 0 处渲染一个Texture,宽为 1,高为 1,它的左下角在屏幕中间,大小为 20px*20px(在1600*900 屏幕)。 要让相机原点位于屏幕的左下角(正如我们通常想要的那样),您需要通过调用camera.translate(viewPortWidth/2, viewPortHeight/2) 或设置其位置来移动它:camera.position.set(viewPortWidth/2, viewPortHeight/2)。之后你必须打电话给camera.update() 让它知道你移动了它。每次更改相机后(旋转,平移...)。
要使用此相机渲染您的Textures,您必须设置SpriteBatchs projectionMatrix,这就像世界观或类似的东西。为此,您可以致电:spriteBatch.setProjectionMatrix(camera.combined)。然后,如果你用这个spriteBatch 画画,一切都会正常。

阅读内容:Projection, viewport, camera The new Viewports

【讨论】:

  • 天哪,谢谢@Springrbua,我会尽快回复你
  • 很抱歉问了这个愚蠢的问题,但是对于视口,您如何说 80 宽和 45 高,您怎么知道它在 1600 * 900 像素的屏幕上等于 20 像素?并且像隐形坐标一样使用 80 x 45?
  • 当您设置相机视口的宽度时,您会说:我想在屏幕宽度上设置 80 个单位。所以它说我有 1600 像素,我想要 80 个单位,所以 1600/80 = 20 像素/单位。
  • 哦,还有一个问题,我是否必须通过并更新游戏中每个纹理的位置和大小,或者将这个相机放入游戏中会自动调整所有内容?抱歉所有问题,但是您将 80 和 45 放在哪里是适合大多数手机和平板电脑的最佳尺寸,因为它们必须遵循一个比例,不是吗?
  • 这取决于你的游戏。这只是一个适合我的游戏的值,因为我说我想要 80 个单位的宽度并且我想要 16/9 的纵横比。是的,如果您到目前为止以像素为单位计算位置,则必须重做。为了更容易将您的单位视为米。例如,您的卡赫拉克特大约 2 米高。如果您希望角色高度为屏幕高度的一半,则视口高度应为 4。然后,根据您的纵横比设置宽度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
相关资源
最近更新 更多