2015年

2月

14日

Cocos2d-x Ver 3.x UserDefaultの作成

アプリ内でデータを保存する方法について
これを利用すれば、アプリを終了しても永続的にデータが記録されるので、「ゲームのスコア」、「音声設定」「その他設定値」などを表示や保存することができます。


保存、読込、方法とlog、ラベルにて画面表示の記述例をまとめてみました。


Cocos2dx 3.x C++言語

TopUserDefault.hを次のように変更してみてください。

#ifndef __UserDefault__TopUserDefault__

#define __UserDefault__TopUserDefault__


#include "cocos2d.h"

USING_NS_CC;


class TopUserDefault :public Layer

{

protected:

    // コンストラクタ

    TopUserDefault();

    // デストラクタ

    virtual ~TopUserDefault();

    // メソッド CREATE_FUNCとの連携

    bool init() override;

    

public:

    static cocos2d::Scene* createScene();

    

    CREATE_FUNC(TopUserDefault);

};


#endif /* defined(__UserDefault__TopUserDefault__) */

 

TopUserDefault.cppを次のように変更してみてください。

#include "TopUserDefault.h"


USING_NS_CC;     // cocos2d


// _/_/_/ コンストラクタ プロパティー _/_/_/

TopUserDefault::TopUserDefault()

{

    

}


// MainScene デストラクタで解放 メモリーリークを防ぐ

TopUserDefault::~TopUserDefault()

{

    

}


// createSceneLayerSceneに貼り付けて返すクラスメソッドです。

// 自分自身(TopUserDefault)を生成し、空のSceneに貼り付けて返す簡単な処理を行っているだけです。

// これでほかのシーンからの遷移が楽に行えます。

Scene* TopUserDefault::createScene()

{

    auto scene = Scene::create();

    auto layer = TopUserDefault::create();

    scene->addChild(layer);

    

    return scene;

}


bool TopUserDefault::init()

{

    if ( !Layer::init() )

    {

        return false;

    }

    

    //////////////////////////////////////////////////

    

    // 画面サイズサイズを取得

    auto winSize = Director::getInstance()->getVisibleSize();

    // バックグランドカラー

    auto background = LayerColor::create(Color4B::BLUE,

                                         winSize.width,

                                         winSize.height);

    // バックグランドカラー 第2引数は表示順

    this->addChild(background, 0);

    

    //////////////////////////////////////////////////

    

    // UserDefault 保存

    auto user = cocos2d::UserDefault::getInstance();

    user->setStringForKey("name", "綾瀬 はるか");

    user->setIntegerForKey("hp", 100);

    user->setBoolForKey("connected-facebook", true);

    user->setFloatForKey("height", 172.5);

    user->setDoubleForKey("weight", 50.0);


    

    // UserDefault 読込 LOG表示

    auto userRead = cocos2d::UserDefault::getInstance();

    log("name: %s", userRead->getStringForKey("name").c_str());

    log("hp: %d", userRead->getIntegerForKey("hp"));

    log("bool: %d", userRead->getBoolForKey("connected-facebook"));

    log("height: %f", userRead->getFloatForKey("height"));

    log("weight: %f", userRead->getDoubleForKey("weight"));

    

    

    // UserDefault 読込

    UserDefault* userDef = UserDefault::getInstance();

    // string

    auto string = userDef->getStringForKey("name");

    // int

    auto _int = userDef->getIntegerForKey("hp");

    // bool

    auto _bool = userDef->getBoolForKey("connected-facebook");

    // float

    auto _float = userDef->getFloatForKey("height");

    // double

    auto _double = userDef->getDoubleForKey("weight");

    

    //////////////////////////////////////////////////

    // 画面表示

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    // string 文字(名前)

    auto label = Label::createWithSystemFont("UserDefault", "arial", 70);

    // ラベルの色:ホワイト

    label->setColor(Color3B::WHITE);

    //画面の中央に表示

    label->setPosition(Point(winSize.width/2, winSize.height/1.2));

    // Layerにラベルを追加

    this->addChild(label);

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    // Label::createWithSystemFont("文字列", "フォントの種類", 文字サイズ);

    // string 文字(名前)

    auto label01 = Label::createWithSystemFont("string", "arial", 70);

    // ラベルの色:ホワイト

    label01->setColor(Color3B::WHITE);

    //画面の中央に表示

    label01->setPosition(Point(winSize.width/2 - 300, winSize.height/1.5));

    // Layerにラベルを追加

    this->addChild(label01);

    

    // UserDefault

    // Label::createWithSystemFont("文字列", "フォントの種類", 文字サイズ);

    // string 文字(名前)

    auto label1 = Label::createWithSystemFont(string, "arial", 70);

    // ラベルの色:ホワイト

    label1->setColor(Color3B::WHITE);

    //画面の中央に表示

    label1->setPosition(Point(winSize.width/2 + 200, winSize.height/1.5));

    // Layerにラベルを追加

    this->addChild(label1);

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    // int 数字

    auto label02 = Label::createWithSystemFont("int", "arial", 70);

    // ラベルの色:ホワイト

    label02->setColor(Color3B::WHITE);

    //画面の中央に表示

    label02->setPosition(Point(winSize.width/2 - 300, winSize.height/1.9));

    // Layerにラベルを追加

    this->addChild(label02);

    

    // UserDefault

    // int 数字

    auto label2 = Label::createWithSystemFont(StringUtils::toString(_int),"arial", 70);

    // ラベルの色:ホワイト

    label2->setColor(Color3B::WHITE);

    //画面の中央に表示

    label2->setPosition(Point(winSize.width/2 + 200, winSize.height/1.9));

    // Layerにラベルを追加

    this->addChild(label2);

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    // bool

    auto label03 = Label::createWithSystemFont("bool", "arial", 70);

    // ラベルの色:ホワイト

    label03->setColor(Color3B::WHITE);

    //画面の中央に表示

    label03->setPosition(Point(winSize.width/2 - 300, winSize.height/2.5));

    // Layerにラベルを追加

    this->addChild(label03);

    

    // UserDefault

    // bool

    auto label3 = Label::createWithSystemFont(StringUtils::toString(_bool),"arial", 70);

    // ラベルの色:ホワイト

    label3->setColor(Color3B::WHITE);

    //画面の中央に表示

    label3->setPosition(Point(winSize.width/2 + 200, winSize.height/2.5));

    // Layerにラベルを追加

    this->addChild(label3);

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    // float 身長

    auto label04 = Label::createWithSystemFont("float", "arial", 70);

    // ラベルの色:ホワイト

    label04->setColor(Color3B::WHITE);

    //画面の中央に表示

    label04->setPosition(Point(winSize.width/2 - 300, winSize.height/3.5));

    // Layerにラベルを追加

    this->addChild(label04);

    

    // UserDefault

    // float 身長

    auto label4 = Label::createWithSystemFont(StringUtils::toString(_float),"arial", 70);

    // ラベルの色:ホワイト

    label4->setColor(Color3B::WHITE);

    //画面の中央に表示

    label4->setPosition(Point(winSize.width/2 + 200, winSize.height/3.5));

    // Layerにラベルを追加

    this->addChild(label4);


    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    // double 体重

    auto label05 = Label::createWithSystemFont("double", "arial", 70);

    // ラベルの色:ホワイト

    label05->setColor(Color3B::WHITE);

    //画面の中央に表示

    label05->setPosition(Point(winSize.width/2 - 300, winSize.height/6));

    // Layerにラベルを追加

    this->addChild(label05);

    

    // UserDefault

    // double 体重

    auto label5 = Label::createWithSystemFont

                          (StringUtils::toString(_double),"arial", 70);

    // ラベルの色:ホワイト

    label5->setColor(Color3B::WHITE);

    //画面の中央に表示

    label5->setPosition(Point(winSize.width/2 + 200, winSize.height/6));

    // Layerにラベルを追加

    this->addChild(label5);

    

    //////////////////////////////////////////////////

    

    return true;

}


※注意 flush() Androidでは動作しない(iPhoneでは動作している)

    // UserDefault 保存

    auto user = cocos2d::UserDefault::getInstance();

    user->setStringForKey("name""綾瀬 はるか");

    user->setIntegerForKey("hp", 100);

    user->setBoolForKey("connected-facebook", true);

    user->setFloatForKey("height"172.5);

    user->setDoubleForKey("weight"50.0);

    

    // 保存

    user->flush(); <ー この記載を付けるとAndroidでは動作しないので削除

 

目 次

 

アクセスカウンター 活性酸素 アクセスカウンター