我是 cocos2d-x ios 游戏开发的新手,真的从 stackoverflow 学到了很多东西。我想感谢所有的软件编码人员。现在我的问题是我正在制作一款具有关卡和高分的游戏。但还是做不到。找不到存储高分和清除级别的方法。当游戏重新启动时,所有值都设置为初始值,因为没有数据库可获取。我听说过 cocos2d-x 中的 userdefault 但真的找不到执行方式。任何人都可以帮我一个 sample 。我会感谢你
最佳答案
CCUserDefault 充当键值对并存储与键对应的值。假设您要存储游戏的高分,以便当用户退出后重新启动游戏时,更改应该保留 为此,在您的 .cpp 文件中,在包含 header 后在顶部取一个 const 键值
const char *HIGH_SCORE="key1";
key1 是一个键,这个键对于你声明的每个 const char * 都必须不同 删除 init 函数中这些行之后的行以返回 true 语句。
if(!CCLayer::init())
{
return false;
}
不要删除return true。然后在你的init函数中写下面的代码
CCUserDefault *def=CCUserDefault::sharedUserDefault();
def->setIntegerForKey(HIGH_SCORE, 2000);
def->flush();
这里 def 是指向 CCUserDefault 的指针,它将有助于访问该类中的所有方法。 SetIntegerForKey 是将相应的整数值设置为常量 char * 的方法。 还有更多函数可以存储字符串、 float 、 bool 值和 double 值。
def->flush() 是一个将内容刷新到 xml 文件的函数。它基本上是将数据保存到xml文件中
要从键中检索值,假设我们要检索最高分并显示在标签上
int high_score=def->getIntegerForKey(HIGH_SCORE);
这里我们将整数转换为字符串,以便我们可以在标签上显示
char s[4];
sprintf(s,"%d", high);
将分数添加到标签
CCLabelTTF *high_label=CCLabelTTF::create(s, "Arial.fnt", 20);
high_label->setPosition(ccp(200,200));
this->addChild(high_label);
现在运行你的项目,你会在屏幕上看到 2000
现在停止运行并注释以下行
//def->setIntegerForKey(HIGH_SCORE, 2000);
//def->flush();
再次重新运行项目,屏幕上的值仍然是 2000。这意味着现在 HIGH_SCORE 存储在 xml 文件中并从中检索值。因此即使在应用程序关闭后更改仍然存在
关于cocos2d-x - 如何在 cocos2dx (c++) ios 游戏中将数据存储为数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21097852/