使用对象方法

时间:2015-06-16 08:50:08

标签: c++ arrays object

我花了一些时间研究这个问题,虽然我看到过类似的问题,但没有一个问题适用于我的问题。

我的问题是,当我更新这些对象时,只有最后一个正确更新。另一个(或更多)要么根本不移动(调试器显示它们被调用,但更新功能即使对非零输入也没有做任何事情),或者移动并且即使最后一个展示也没有正确地发生碰撞正确的行为。我真的很想弄清楚如何让它们全部正确更新。

发生的事情是我涉及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);
}

1 个答案:

答案 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 }