我是C++的新手,并致力于制作2D游戏。
我似乎在动画精灵方面遇到了问题:
我有一个类,其中包含一个sprite(sheet)的动画数据的私有(private)多维 vector 。该类的工作方式如下:
#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填充了许多包含浮点数的 vector ,这是应该的。但是,当构造函数退出并且我想使用getFloat函数检索数据时,BigVector仅包含1个元素;添加的第一个元素。
我相信这与持有人 vector 超出范围有关...
有任何想法吗?
编辑
我找到了答案:错误不是与此类有关,而是与使用它的类有关:
我声明了一个局部变量,从而阻止了我的Animator的更新,而不是(重新)声明了我的私有(private)“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添加了一个 vector ,使我认为BigVector的其余部分被删除了。
希望这可以帮助!
最佳答案
我认为这只是一个错字,但应该是
float getFloat(int n, int m) {
return BigVector[n][m];
} ^^^
另外,您只是填充临时的
holder
vector ,而从未将数据复制到BigVector
。您应该改为:myClass()
{
std::vector<float> holder = myFunction();
BigVector.push_back(holder); // Put the newly filled vector in the multidimensional vector.
}
另外,您可能希望使用引用,而不是尽可能按值复制。