【发布时间】:2014-10-31 22:49:20
【问题描述】:
我正在开发一个使用 Box2D 进行物理的游戏,但遇到了 void * 的问题。
Box2D 灯具有一个 (void*) userData 字段,对于我关卡中的门,我将其设置为门信息的地址,这是一个名为 NextLevel(下)的结构。
struct NewLevel {
bool changed;
std::string name;
int x;
int y;
int posx;
int posy;
int num;
};
门存储在std::vector<NewLevel> doors 的关卡类中。在组装每个关卡的循环中,如果有门,我doors.push_back(NewLevel()),然后相应地设置数据。然后我存储FixtureDef.userData = &doors.back()。
但是,当我去检索该信息时,它不起作用。 (fixB 是一个指向正在接触的夹具的指针)。
NewLevel nextDoor = *(static_cast<NewLevel*>(fixB->GetUserData()))
有时,它确实有效。但是,在其他时候,它会产生胡言乱语。当我加载下一个级别时,我清除了向量。我打印了很多指针,有时它们不匹配,这是什么原因造成的?有没有更好的方法来传递这些数据?
谢谢! (如果需要我可以放更多代码)
编辑:
我最终解决了这个问题,方法是存储 box2d 中的 b2Fixture* 和门向量中的项目索引,而不是尝试投射/重新投射指向 NewLevel 的指针,它一直运行良好。感谢所有的帮助,跟踪索引的概念让我想到了正确的方向。
【问题讨论】: