我正在阅读有关游戏开发的 Android 教程,该教程解释了如何将游戏中的坐标转换为实际像素。很简单。这是通过函数 worldToScreen()
完成的,如下所示:
public Rect worldToScreen(float objectX, float objectY, float objectWidth, float objectHeight){
int left = (int) (screenCentreX - ((currentViewportWorldCentre.x - objectX) * pixelsPerMetreX));
int top = (int) (screenCentreY - ((currentViewportWorldCentre.y - objectY) * pixelsPerMetreY));
int right = (int) (left + (objectWidth * pixelsPerMetreX));
int bottom = (int) (top + (objectHeight * pixelsPerMetreY));
convertedRect.set(left, top, right, bottom);
return convertedRect;
}
它似乎返回一个矩形对象,其中包含方形对象将占据的四个点。
- 为什么用正方形?
- 为什么要减去 top/left 并添加 bottom/right?
将不胜感激详尽的解释。
最佳答案
问题 1 的答案
他使用矩形可能是因为它是一个已经在 Java
中实现的简单几何对象。在大多数游戏库中,就像您正在使用的那样(我可以看到他正在使用 Rect
类)。
例如,当您想实现简单的碰撞检测时,矩形也是 2D 游戏中的常见解决方案。
问题 2 的答案
你问他为什么要添加 bottom
和 right
...但我只能看到他正在添加 top
和 left
.
他这样做是因为 y
轴从上到下,x
轴从左到右。
所以得到bottom
点你必须添加 y
顶点坐标到 height
矩形的。
同样适用于 right
点,你必须添加 x
left
的坐标指向 width
的矩形。
希望我的Paint
技能可以派上用场 我画了一张图,可能会帮助你理解:
为了使绘图和我的答案更加清晰:
顶部+高度=底部
左 + 宽 = 右
PS:“他”是制作您正在关注的教程的人。
关于java - worldToScreen() - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34519972/