【问题标题】:How to Store the highscore in the game如何在游戏中存储高分
【发布时间】:2014-05-13 07:49:49
【问题描述】:

我正在使用 cocos2d-x 在 xcode 中开发游戏。我想在游戏结束场景中显示高分。当我运行游戏时,即使分数低于高分,分数也会显示在游戏结束场景中而不是高分中。我认为不存储高分。我正在使用以下代码。请帮我解决这个问题。

CCUserDefault *def=CCUserDefault::sharedUserDefault();
long int high_score=0; 
if(score>high_score)
{
    def->setIntegerForKey(HIGH_SCORE, score);
    //def->flush();
    //high_score=def->getIntegerForKey(HIGH_SCORE);
}
else if(score<high_score)
{
    def->setIntegerForKey(HIGH_SCORE, high_score);
    //def->flush();
    //high_score=def->getIntegerForKey(HIGH_SCORE);
}
high_score=def->getIntegerForKey(HIGH_SCORE);

char s[7];
sprintf(s,"%ld", high_score);
CCLabelTTF *high_label=CCLabelTTF::create(s, "Arial.fnt", 20);
high_label->setPosition(ccp(winwsize - 800, winhsize - 50));
this->addChild(high_label,2);

【问题讨论】:

  • 所以high_score总是初始化为0?也许将其设为静态或使用成员而不是局部变量。 ;)
  • 您好,感谢您的评论,我将 high_score 变量声明为类成员并删除 score
  • 这仅与变量间接有关。您必须将值保存在文件或数据库中。也许创建一个txt文件,保存分数并在启动程序时读取它,并在退出时将值保存在文件中。

标签: c++ cocos2d-x


【解决方案1】:

high_core 变量设为全局变量。

请注意,如果 score&lt;high_score 真的不需要任何东西,那么您可以删除 def-&gt;setIntegerForKey(HIHG_SCORE, high_score); 语句。

【讨论】:

  • 不要让它全球化!使其成为班级成员。但不是全球性的,这是不好的风格。
  • 确实,如果这里有 OOP 设计,最好让它成为一个类成员......我定义“全局”的意思......意味着,不是堆栈上的本地
  • 您好,感谢您的评论,我将 high_score 变量声明为类成员并删除 score
  • @user3616535: 如果你想保存程序会话之间的高分,你必须在一个会话结束时将它存储到某个缓冲区(文件或注册表)中,然后你需要重新加载它在第二个会话中记忆
  • 现在它正在工作我在 def 声明旁边添加了“high_score=def->getIntegerForKey(HIGH_SCORE);”,它工作正常。
猜你喜欢
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2013-05-19
  • 2016-11-06
相关资源
最近更新 更多