cocos2d-x

Cocos2d-xで使えるプログラム[plist]

はじめに

plistは何かの説明は他の方々が書いているのでここでは書かない
何に使えてどう扱うのか書いていく

使用用途

  • セーブデータ
  • アイテムやモンスターなどのデータ

主にデータの保存に使う
CSVにするかplistにするかJSONにするかの違い

使い方-読み込み-

以下のようなplistがあるとする

playerNo name coin last
1 708QBT 20 2017/11/15
2 SIDE 500 2017/10/20
3 RENDER 10000 2017/08/03
Sample.cpp
void Sample::loadPlist(){
    //plistファイルの読み込み
    ValueVector plistData = FileUtils::getInstance()->getValueVectorFromFile("sample.plist");

    //plistの行を一行ごとに読み込む
    for (auto itr : plistData){
        ValueMap dic = itr.asValueMap();

        int player = dic.at("playerNo").asInt();
        std::string name = dic.at("name").asString();
        int coin = dic.at("coin").asInt();
        std::string last = dic.at("last").asString();

    }
}

おまけ

Sample.cpp
void Sample::loadPlist(){
    //plistファイルの読み込み
    ValueVector plistData = FileUtils::getInstance()->getValueVectorFromFile("sample.plist");

    //Enemyクラスを格納できるvector作成
    //Enemyクラスは自作してください
    std::vector<Enemy*> enemyList;

    //plistの行を一行ごとに読み込む
    for (auto itr : plistData){
        ValueMap dic = itr.asValueMap();

        int player = dic.at("playerNo").asInt();
        std::string name = dic.at("name").asString();
        int coin = dic.at("coin").asInt();
        std::string last = dic.at("last").asString();

        //一行ごとにEnemyを作る
        Enemy* enemy = Enemy::create(player, name, coin, last);
        this->addChild(enemy);

        //enemyListにenemyを登録
        enemyList.push_back(enemy);
    }

    //enemyListの中身を頭から読み込む
    for (auto itr = enemyList.begin(); itr != enemyList.end(); itr++) {
        Enemy* enemy = (Enemy*)(*itr);
        //enemyを動かすならmove関数作って動かせばいい

    }
}

ステージごとに敵のデータを一気に読み込んで画面外に待機させ、時間経過とともに動かせばゲームっぽくなる

使い方-書き込み-

Sample.cpp
void Sample::savePlist(){
    //データを保存するために格納するValueVectorを作成
    ValueVector saveData;

    //書き込みたいデータを作成
    ValueMap data1;
    data1["id"] = 1;
    data1["name"] = "tarou";
    data1["age"] = 14;

    saveData.push_back(Value(data1));

    ValueMap data2;
    data2["id"] = 2;
    data2["name"] = "oyaji";
    data2["age"] = 42;

    saveData.push_back(Value(data2));

    //パスを指定して書き込む
    std::string path = FileUtils::getInstance()->getWritablePath() + "save.plist";

    if (FileUtils::getInstance()->writeValueVectorToFile(saveData, path)){
        //書込み成功時の処理
    }
}

読み込みと書き込みをすればセーブデータとなる
ただ、plistはテキストファイルとして開くことができ、改竄出来る
改竄出来ない、させない工夫が必要である

次回

そのうち考える