c++ - 尝试使用 OpenGL 制作 Endless Runner C++
问题描述
我有一个像这样初始化的立方体对象数组(此处未使用索引 0,因为这是给玩家的):
game_object[1] = new GameObject();
game_object[1]->setPosition(vec3(7.0f, 0.0f, 0.0f));
game_object[2] = new GameObject();
game_object[2]->setPosition(vec3(14.0f, 0.0f, 0.0f));
game_object[3] = new GameObject();
game_object[3]->setPosition(vec3(21.0f, 0.0f, 0.0f));
game_object[4] = new GameObject();
game_object[4]->setPosition(vec3(36.0f, 0.0f, 0.0f));
game_object[5] = new GameObject();
game_object[5]->setPosition(vec3(42.0f, 0.0f, 0.0f));
我有一个渲染函数,在其中绘制它们:
glDrawElements(GL_TRIANGLES, 3 * INDICES, GL_UNSIGNED_INT, NULL);
在我的更新中,它们按预期向左移动。为此,我只是在他们的位置上添加另一个向量:
for (int i = 1; i < MAX_CUBES; i++)
{
game_object[i]->setPosition(game_object[i]->getPosition() + vec3(-0.03, 0.0, 0.00));
}
但是,我希望立方体重复此操作,直到用户退出游戏。我做了一个重置功能将它们送回起始位置:
void Game::reset()
{
game_object[0]->setPosition(vec3(0.0f, 0.0f, 0.0f));
game_object[1]->setPosition(vec3(7.0f, 0.0f, 0.0f));
game_object[2]->setPosition(vec3(14.0f, 0.0f, 0.0f));
game_object[3]->setPosition(vec3(21.0f, 0.0f, 0.0f));
game_object[4]->setPosition(vec3(36.0f, 0.0f, 0.0f));
game_object[5]->setPosition(vec3(42.0f, 0.0f, 0.0f));
}
当最终立方体的位置离开屏幕左侧时,此函数在更新中被调用:
if (game_object[5]->getPosition().x <= 0.0)
{
reset();
}
但是,这是行不通的。最后一个立方体向左移动后没有任何重置。
解决方案
不知道你是如何在game_object
这里使用的,但看起来很容易出错。如果你有MAX_CUBES = 5
(因为你有 5 个立方体),那么那个 for 循环将错过最后一个。添加更多对象(例如,用于间隙、垂直规则、危险等)将使其更加如此。
for (int i = 1; i < MAX_CUBES; i++)
{
game_object[i]->setPosition(game_object[i]->getPosition() + vec3(-0.03, 0.0, 0.00));
}
如果MAX_CUBES
= 5,那么它将移动索引 1、2、3、4,而不是 5,这是您在条件中检查的索引。5 将永远停留在42
屏幕上(是屏幕外吗?)。
无论如何,在调试器中单步执行代码将使这样的问题非常清楚,并且是编程的重要工具。也许代码一开始就没有到达if (game_object[5]->getPosition().x <= 0.0)
检查?该更新功能中是否有任何return
内容,或者该条件是否存在于另一种情况中?
推荐阅读
- javascript - js点击的过渡持续时间
- python - 如何在字符串中搜索特定的单词序列?
- c - 矩阵的动态数组
- javascript - 如何从数组中提取最长的单词?JavaScript/JSON
- php - 将 PHP 数组渲染为 TWIG 中的表
- functional-programming - Racket协程实现中的死锁
- ruby-on-rails - NoMethodError 未定义方法 `[]' for nil:NilClass
- php - 如何解决具有大量价值的行查询,缓冲查询超出 10240 KB 的内存限制
- javascript - 使用 jquery 或 javascript 在外部 iframe 中设置输入字段值
- python - 如何设置范围以使用 numpy 的范围