1

我是 C++ 新手,正在制作 2D 游戏。我似乎遇到了动画精灵的问题:

我有一个类,其中包含一个精灵(表)的动画数据的私有多维向量。该类的工作方式如下:

#include <vector>

class myClass {

private:
    std::vector< std::vector<float> > BigVector;

public:
    //constructor: fills the multidimentional vector 
    //with one-dimentional vectors returned by myfunction.
    myClass() {

        //this line is called a few times within a while loop
        std::vector<float> holder = myFunction();

    }

    std::vector<float> myFunction() {

        std::vector<float> temp;
        //fill temp
        return temp;
    }

    //Other class access point for the vector
    float getFloat(int n, int m) {
        return Vector[n][m];
    }
};

该类本身包含在另一个类中,该类使用 getFloat 函数检索数据。

在构造函数的末尾,BigVector 填充了许多包含浮点数的向量,这是应该的。但是,当构造函数退出并且我想使用 getFloat 函数检索数据时,BigVector 仅包含 1 个元素;添加的第一个元素。

我相信这与持有人向量超出范围有关......有什么想法吗?

编辑

我找到了答案:问题不在于这个类,而在于使用它的类:我没有(重新)声明我的私有“Animator”,而是声明了一个局部变量,这阻止了我的 Animator 更新。基本上:

private: Animator A //calls upon the default construstor of Animator class

然后在函数/构造函数中声明

Animator A(parameters); //creates a local instance of Animator called A

代替

A = Animator(parameters); //redeclares A as a new Animator with the parameters

这就是我想要的。我的默认构造函数向 BigVector 添加了一个向量,导致我认为 BigVector 的其余部分已被删除。

希望这可以帮助!

4

1 回答 1

2

我认为这只是一个错字,但它应该是

float getFloat(int n, int m) {
   return BigVector[n][m];
}         ^^^

此外,您只是在填充临时holder向量,而从不将数据复制到BigVector. 你应该这样做:

myClass() 
{
   std::vector<float> holder = myFunction();
   BigVector.push_back(holder); // Put the newly filled vector in the multidimensional vector.
}

此外,您可能希望尽可能使用引用而不是按值复制。

于 2013-08-18T13:49:41.300 回答