2015-08-15 47 views
0

我在我的游戏的全局类中有一个叫做realMap的地图。它用于在地图中存储变量,只要realMap在范围内,游戏中的所有对象都可以访问它们。基本上像Gamemaker中的global.。因此,地图中的所有内容都是在运行时存储的。C++映射值在运行时不会改变,我做错了什么?

这是地图初始化代码 std::map<const char*, Real> realMap;Real是在宣布double另一个文件。)

在我的播放器对象,在启动时,播放器 globalObject.realMap["playerDead"] = false;

所以我检查和它等于0.

但是当玩家死亡时,它应该将地图键设置为true,但它不会。我没有检查所显示的消息,它的价值,它仍然是0。 下面是代码:

ObjGlobal->realMap["playerDead"] = true; 
Real tempVal = ObjGlobal->realMap.at("playerDead"); 
agk::Message(agk::Str(int(tempVal))); 

因此,正如我所说,AGK ::消息显示0

我在做什么错?我对地图仍然陌生,对于C++来说还是一个新的东西,所以如果这是一个愚蠢的错误,那么很抱歉。

在此先感谢

+1

为什么使用'Real'('double ....')来存储布尔值???!? – Amit

回答

3

您使用一个指向字符串字面量为重点,以地图,但你必须在你的代码的两个不同"playerDead"字符串。除非你的链接器正在将两个字符串优化为相同的指针(许多链接器所做的优化 - 但不必),否则这些键实际上最终会不同。

如果将地图定义更改为std::map<std::string, Real>,它应该按预期工作,因为密钥实际上将基于字符串的内容而不是内存中的地址。

+0

非常感谢!我从来没想过那个。 – null