【发布时间】: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