如何在cocos2dx(c ++)ios游戏中将数据存储为数据库

时间:2014-01-13 17:42:02

标签: cocos2d-x

我对cocos2d-x ios游戏开发全新,并且真正从stackoverflow中学到很多东西。只想感谢所有的软件编码器。现在我的问题是我正在制作一个水平和高分的游戏。但仍然无法'找到一种方法来存储高分和清除的级别。当游戏重新启动时,所有的值都设置为初始值,因为没有要获取的数据库。我在cocos2d-x中听说过userdefault,但实际上找不到执行方式。任何人都可以帮我提供样品。我会感谢你

2 个答案:

答案 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,如果您想存储复杂数据,则可以使用SQLiteCCDictionary

以下是在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);