我目前正试图在我的游戏中加入动态足迹音频。现在是一些代码:
class MyClass
{
vector< unique_ptr <Sound> > footstep_a;
vector< unique_ptr <Sound> > footstep_b;
vector< unique_ptr <Sound> > footstep_c;
vector< Sound > currentfootsteps;
}
所以基本上我想做的是将一个footstep_向量分配给currentfootsteps,以便我可以拥有:
if( walkingarea == a )
currentfootsteps = a;
else ......
我尝试过以下操作,但它只会引起一百万个关于矢量的错误:
if ( walkingarea == a )
currentfootsteps.clear();
for(int i = 0; i < footstep_a.size(); i++)
currentfootsteps.push_back( footstep_a[i] );
任何人都可以帮助我吗?
答案 0 :(得分:2)
我真的不明白你要做的是什么,但假设Sound
类是可复制的,这将编译:
currentfootsteps.clear();
for(auto const& up : footstep_a) {
currentfootsteps.push_back(*up);
}
请注意,您要在footstep_a
中复制每个元素并将其添加到currentfootsteps
。
如果Sound
仅限移动,或者您想避免复制,请改用:
currentfootsteps.clear();
for(auto&& up : footstep_a) {
currentfootsteps.push_back(std::move(*up));
}
但似乎你应该能够通过使currentfootsteps
成为一个指针来避免这一切,并根据满足的条件简单地指向vector
之一。
vector< unique_ptr <Sound> > *currentfootsteps = nullptr;
if ( walkingarea == a ) {
currentfootsteps = &footstep_a;
} else if ...
答案 1 :(得分:1)
顾名思义,应该移动unique_ptr而不是复制到:
currentfootsteps.push_back( footstep_a[i] );
您可以尝试使用.get()
获取原始指针,然后将其置于当前足迹中。
与此同时,您需要确保Sound
对象的生命周期足够长。
根据我的理解,currentfootsteps
仅保留对Sound
个对象的引用,而footstep_a
,footstep_b
,footstep_c
实际拥有它们。