java - worldToScreen() - 它是如何工作的?

标签 java android game-engine

我正在阅读有关游戏开发的 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;
    }

它似乎返回一个矩形对象,其中包含方形对象将占据的四个点。

  1. 为什么用正方形?
  2. 为什么要减去 top/left 并添加 bottom/right?

将不胜感激详尽的解释。

最佳答案

问题 1 的答案

他使用矩形可能是因为它是一个已经在 Java 中实现的简单几何对象。在大多数游戏库中,就像您正在使用的那样(我可以看到他正在使用 Rect 类)。

例如,当您想实现简单的碰撞检测时,矩形也是 2D 游戏中的常见解决方案。

问题 2 的答案

你问他为什么要添加 bottomright ...但我只能看到他正在添加 topleft . 他这样做是因为 y轴从上到下,x轴从左到右。

所以得到bottom点你必须添加 y顶点坐标到 height矩形的。

同样适用于 right点,你必须添加 x left 的坐标指向 width的矩形。

希望我的Paint技能可以派上用场 我画了一张图,可能会帮助你理解: enter image description here

为了使绘图和我的答案更加清晰:

顶部+高度=底部

左 + 宽 = 右

PS:“他”是制作您正在关注的教程的人。

关于java - worldToScreen() - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34519972/

相关文章:

java - Maven项目的变更

java.sql.SQLException : [Microsoft][ODBC Driver Manager] Invalid string or buffer length 异常

php - Android-将日期和时间保存到mysql中

java - android更改选择器和选项卡下划线的默认颜色

Java gson,解码到 Map<String,String[]> 时出现 ClassCastException

java - 红黑树必须按顺序排列吗?

android - flavor A 的 Robolectric 测试用例通过而 flavor B 失败

c++ - 如何计算 32 位 float epsilon?

Android 多人实时游戏,最好的协议(protocol)/通信是什么?

C++控制台游戏输入&&刷新函数