У меня есть массив объектов куба, инициализированных так (индекс 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();
}
Однако это не работает.Ничто не сбрасывается после того, как последний куб уходит влево.