我对cocos2d-x ios游戏开发全新,并且真正从stackoverflow中学到很多东西。只想感谢所有的软件编码器。现在我的问题是我正在制作一个水平和高分的游戏。但仍然无法'找到一种方法来存储高分和清除的级别。当游戏重新启动时,所有的值都设置为初始值,因为没有要获取的数据库。我在cocos2d-x中听说过userdefault,但实际上找不到执行方式。任何人都可以帮我提供样品。我会感谢你
答案 0 :(得分:4)
CCUserDefault充当键值对并存储与键对应的值。假设您想要存储游戏的高分,以便当用户在退出后重新启动游戏时,更改应该保持不变 为此,在.cpp文件中,在包含头文件后的顶部取一个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 *的方法。 还有更多函数可以存储string,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文件中,并从中检索值。因此,即使应用程序关闭后更改仍然存在
答案 1 :(得分:3)
如果您要存储高分,当前等基本信息,那么您可以使用CCUserDefault
,如果您想存储复杂数据,则可以使用SQLite
或CCDictionary
以下是在Cocos2dx-3.0
中存储和检索高分的伪代码:
const char* KEY_HIGH_SCORE = "high_score";
// Store High Score
UserDefault::getInstance()->setIntegerForKey(KEY_HIGH_SCORE, 100);
// Retrieve High Score.
int high_score = UserDefault::getInstance()->getIntegerForKey(KEY_HIGH_SCORE);