【问题标题】:Screen Wrapping using GLFW使用 GLFW 进行屏幕换行
【发布时间】:2022-01-06 01:32:59
【问题描述】:

我正在尝试制作小行星克隆,但是当我的游戏对象离开屏幕时出现屏幕环绕问题。

我目前的方法是将屏幕的边界与对象的位置进行比较,即glm::vec4,如下所示:

void checkPosition(glm::vec4& position)
{
    int width, height;
    glfwGetWindowSize(WindowManager::getInstance().getWindow(), &width, &height);

    if (position.x < -100.0f)
    {
        position.x = width;
    }

    if (position.x > (float)width + 100.0f)
    {
        position.x = 0.0f;
    }

    if (position.y < -100.0f)
    {
        position.y = height;
    }

    if (position.y > (float)height + 100.0f)
    {
        position.y = 0.0f;
    }
}

我在边界检查中添加了一点缓冲区,这样对象就不会陷入从边到边交换的循环中(这就是 (float)width + 100.0f 部分的原因)。

问题:一旦我的对象被传送,它的翻译似乎完全被抛弃了。例如,当我的玩家飞船离开屏幕并重新定位到相反的 x 和 y 坐标时,x 坐标完全停止变化。之后,如果我在 y 方向上将船移到屏幕外,y 坐标也会停止响应变化。

我错过了什么?我愿意接受其他方法来获得这种效果。

【问题讨论】:

    标签: c++ opengl game-physics glfw glm-math


    【解决方案1】:

    经过一些测试,我想我已经找到了问题所在。只是设置position 就完全搞乱了我的投影矩阵。解决方法是调用一些函数(在我的情况下为translate),在更新位置时设置单位矩阵。这就是我的样子:

    void Transform::translate(glm::vec3 vector)
    {
        glm::mat4 trans = glm::mat4(1.0f); // identity matrix
        trans = glm::translate(trans, vector);
        position = trans * position;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 2013-12-31
      • 2013-01-12
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多