LoginSignup
2
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-21

はじめに

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はテキストファイルとして開くことができ、改竄出来る
改竄出来ない、させない工夫が必要である

次回

そのうち考える

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2