gpt4 book ai didi

c++ - 使用opengl随机移动小行星

转载 作者:行者123 更新时间:2023-11-28 01:24:35 33 4
gpt4 key购买 nike

我正在尝试以随机方式移动小行星。我传入一个小行星 vector 作为参数,在方法开始时清除屏幕,以防止在屏幕上多次绘制小行星,就像这样:

enter image description here

然而,根据我编写的代码,所有小行星都在向同一方向移动。我需要让它成为一个随机运动,请帮忙。以下是我的代码:

void Entity::move(GLFWwindow * window, vector<Entity> allAsteriods, Entity &sp ) {

DrawEntity de = DrawEntity();

while (!glfwWindowShouldClose(window)) {

glClear(GL_COLOR_BUFFER_BIT);

for (int i = 0; i < allAsteriods.size(); i++) {

glLoadIdentity();
glMatrixMode(GL_MODELVIEW);

float x = allAsteriods[i].return_PositionVector().back().get_X();
float y = allAsteriods[i].return_PositionVector().back().get_Y();

glPushMatrix();
glTranslatef(x, y, 0.0); // 3. Translate to the object's position.

de.drawEntity(allAsteriods[i]);

float additionalX = GenerateRandom(0.10, 0.90);
float additionalY = GenerateRandom(0.10, 0.90);

allAsteriods[i].addTo_PositionVector(x + additionalX, y + additionalY);
glPopMatrix();
}
de.drawEntity(sp);

// Swap front and back buffers
glfwSwapBuffers(window);

// Poll for and process events
glfwPollEvents();
}
}

最佳答案

您每帧都在为您的小行星添加一个随机位置(您可以看到它们在屏幕上向下移动时如何摇晃)。你的随机位置在 X 和 Y 上都只有 0.1 到 0.9,所以它们只会向屏幕的左下方移动。

要解决此问题,您需要执行以下操作:

  • 在您的实体类中,您需要存储一个与位置分开的 Velocity vector 。

  • 当你第一次初始化你的小行星实体时,你需要给它们随机分配一个速度,但是你需要为 X 和 Y 选择一个从 -1 到 1 的速度:

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()

结束

关于c++ - 使用opengl随机移动小行星,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54520921/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com