【问题标题】:Libgdx viewportsLibgdx 视口
【发布时间】:2016-04-05 22:24:04
【问题描述】:

似乎视口没用,但我可能遗漏了一些东西。

例如,我想制作一个游戏,其中我有一个对象,如果我击中屏幕的左端或右端,我就会死!因此,如果我使用 Gdx.graphis.getWidth() 和 0 一切都会正常工作。

好的,但是让我们设置视口 = new ExtendViewport(500, 800, camera); 酷我没有 500 和 800 的虚拟像素 === > 5 : 8 然后我输入点击结束屏幕的逻辑,所以 if object.x 800 ----> object DIES!

但是现在我在分辨率为 1500 x 2000 ===> 3 : 4 的平板电脑上开始游戏,现在一切都错了,整个屏幕向左移动,所以 0 仍然有效但 800 无效屏幕右边缘的末端。

然后我去使用 FitViewport 并且左右边缘的碰撞现在被移动了,因为不同的纵横比。

似乎我可以使用 strechViewport,或者只是手动编码这些东西......但我知道我遗漏了一些东西,因为它必须有它的用途。

不胜感激!

【问题讨论】:

  • 从你想做的事情来看,你认为为你的视口设置一个最大限制会帮助你吗?查看 api libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/…,这可能会帮助您限制视口的大小
  • 设置最大值?我什至无法达到最大值...虽然现在我的游戏有所不同...我对 PlayState 进行编程,您使用 Gdx.graphics.getWidth 和 getHeight() 以老式方式玩游戏的方式,从菜单到其他所有内容我用 ViewPorts 做的选项和东西,这似乎是唯一的解决方案

标签: android libgdx


【解决方案1】:

首先,在我看来,将相机置于 (0, 0) 坐标中心是一个好习惯。那么您将始终将-screenWidth/2 作为左侧屏幕边缘的位置,将screenWidth/2 作为右侧屏幕。

其次,在使用视口时,您不应该直接使用屏幕坐标。 Viewport 有一种方法可以将屏幕的坐标转换为视口的坐标:

    unproject(Vector2 screenCoords)

它也有向后的方法

    project(Vector2 worldCoords)

无论显示器有多大,这些都可以让您始终保持相同类型的坐标。

【讨论】:

  • 投影是否仅对触摸事件有用?当纵横比发生变化时,我使用了 ExtendViewport,这样我就拥有了整个手机的背景,但实际可播放的屏幕部分从屏幕的左侧和右侧移开了......所以在边缘之后就像 - 50 和 550 而不是 0 和 500,我可以将所有内容乘以 aspect_ratio,但是使用 ViewPorts 似乎毫无用处。我在这里想念什么?你能检查我的代码并告诉我我在这里缺少什么吗:pastebin.com/UY0BzBNp,SQUARE 类只有一个精灵和命中框
猜你喜欢
  • 2015-12-06
  • 1970-01-01
  • 2016-04-15
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
相关资源
最近更新 更多