Вы добавляете случайную позицию к вашим астероидам в каждом кадре (вы можете видеть, как они покачиваются при движении вниз по экрану).Ваши случайные позиции составляют только от 0,1 до 0,9 в X и Y, поэтому они будут двигаться только к левому нижнему краю экрана.
Чтобы исправить это, вам нужно сделать следующее:
Внутри вашего класса сущностей вам нужно хранить вектор Velocity
отдельно от позиции.
Когда вы впервые инициализируете свои астероидные сущности, вам нужно случайным образомназначьте им скорость, НО вам нужно выбрать скорость от -1 до 1 для X и Y :
allAsteroids[i].velocity.x = GenerateRandom(-1.0, 1.0)
allAsteroids[i].velocity.y = GenerateRandom(-1.0, 1.0)
- Внутри вашегоОсновной игровой цикл, вы должны добавить скорость к позиции каждого кадра:
//Not sure why you're doing it like this - it should be easy to get X and Y from vectors, but I'll do it the same way:
float velX = allAsteriods[i].return_VelocityVector().back().get_X();
float velY = allAsteriods[i].return_VelocityVector().back().get_Y();
allAsteriods[i].addTo_PositionVector(x + velX, y + velY);
Кроме того, ваш
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
не должен быть внутри петли через все астероиды.Это должно быть сделано только один раз за кадр в верхней части игрового цикла.Ваша петля для астероидов должна начинаться с glPushMatrix()
и заканчиваться glPopMatrix()