我是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更新。 Basicly:
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的其余部分已被删除。
希望这有帮助!
答案 0 :(得分: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.
}
此外,您可能希望在可能的情况下使用引用而不是按值复制。