我花了一些时间研究这个问题,虽然我看到过类似的问题,但没有一个问题适用于我的问题。
我的问题是,当我更新这些对象时,只有最后一个正确更新。另一个(或更多)要么根本不移动(调试器显示它们被调用,但更新功能即使对非零输入也没有做任何事情),或者移动并且即使最后一个展示也没有正确地发生碰撞正确的行为。我真的很想弄清楚如何让它们全部正确更新。
发生的事情是我涉及3个课程。应用,目标和要点。 main函数调用Application.run(),它处理所有其他对象/方法的运行和跟踪。
所以在Application中我有一个Targets数组,TargetsInScene。我在这里初始化它:
void Application::InitTargets() {
TargetsInScene = (Target **) malloc(sizeof(Target *)*MaxTargets);
TargetCount = 0;
// initialize some static class variables here
TargetsInScene[TargetCount] = new Target(1);
TargetCount++;
TargetsInScene[TargetCount] = new Target(1);
TargetCount++;
}
Application::Application(int screenX, int screenY) {
InitTargets();
}
然后Application.Run()调用它:
void C_Application::UpdateTargets() {
for (int i = 0; i < TargetCount; i++)
{
TargetsInScene[i]->Update();
}
更新功能如下所示:
void Target::Update() {
// changes direction if it hits something
checkCollisions()
//coord is a Point obj and update +='s the new values to its x and y values
coord.update(dir*speed, dir*speed);
}
答案 0 :(得分:0)
使用像这样的矢量可以更清洁,更安全。
1 #include <iostream>
2 #include <vector>
3
4 struct Target {
5 void update()
6 {
7 std::cout << "Updating: " << id << std::endl;
8
9 }
10 Target(int i) : id(i){};
11
12 int id;
13 };
14
15 int main()
16 {
17 std::vector<Target> TargetsInScene;
18 for (int i = 0; i < 4; ++i) {
19 TargetsInScene.emplace_back(i);
20 }
21 for (auto& target : TargetsInScene) {
22 target.update();
23 }
24 }