首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Cocos2d-x 系列六:數據操作——定時器、偏好設置、文件讀寫、Plist/XML/JSON 解析

     編輯:C++ 入門

1. 定時器

Cocos2d-x 節點內建調度器,無需額外 Timer 類。

  • scheduleUpdate():每幀調用 update(float dt)。
  • schedule(selector, interval):固定間隔調用自定義函數,selector 為 SEL_SCHEDULE 函數指針。
// 每幀移動
void HelloWorld::update(float dt) {
    label->setPosition(label->getPosition() + Point(1,1));
    if (label->getPosition().x > 500) unscheduleUpdate();
}
// 每秒執行一次
schedule(schedule_selector(HelloWorld::timerHandler), 1.0f);

2. 偏好設置

類似 Android SharedPreferences,鍵值對持久化。

UserDefault::getInstance()->setStringForKey("name", "Livingstone");
string s = UserDefault::getInstance()->getStringForKey("name1", "Hello World");

3. 文件讀寫

使用 C/C++ 標準 IO,但需通過 FileUtils 獲取可寫目錄路徑。

FileUtils* fu = FileUtils::getInstance();
FILE* f = fopen(fu->fullPathFromRelativeFile("data.txt", fu->getWritablePath()).c_str(), "w");
fprintf(f, "Hello"); fclose(f);
// 讀取
Data d = fu->getDataFromFile(fu->fullPathFromRelativeFile("data.txt", fu->getWritablePath()));
log("%s", d.getBytes());

4. Plist 解析

Plist 為 XML 格式鍵值集合,FileUtils 提供 getValueMapFromFile / getValueVectorFromFile。

ValueMap vm = fu->getValueMapFromFile("Info.plist");
log("%s", vm["name"].asString().c_str());
bool bl = vm["isgirl"].asBool();

5. XML 解析

內建 TinyXML2,解析字符串後遍歷節點屬性。

auto doc = new tinyxml2::XMLDocument();
doc->Parse(fu->getStringFromFile("data.xml").c_str());
for (auto e = doc->RootElement()->FirstChildElement(); e; e = e->NextSiblingElement()) {
    string str;
    for (auto attr = e->FirstAttribute(); attr; attr = attr->Next())
        str += attr->Name() + ":" + attr->Value() + ",";
    log("%s", str.c_str());
}

6. JSON 解析

內建 RapidJSON,解析後按索引/鍵訪問。

rapidjson::Document d;
d.Parse<0>(fu->getStringFromFile("dj.json").c_str());
log("%s", d[rapidjson::SizeType(0)]["name"].GetString());
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved