拾弐 Cocos2d-xでデータを保存する 読み出す


目次

1 はじめに
2 データを保存する 読み出す
3 今後の予定

はじめに

データを保存する 読み出す

下記コードを実行すると、タッチ回数が左上に表示され、アプリを再起動時に、保存されたタッチ回数を読み出すことができます。

GameScene.lua
local KEY = "SCORE"

local GameScene = class("GameScene",function()
    return cc.Scene:create()
end)

function GameScene.create()
    local scene = GameScene.new()

    scene:addChild(scene:createLayer())

    return scene
end


function GameScene:ctor()
    self.visibleSize = cc.Director:getInstance():getVisibleSize()
    self.origin = cc.Director:getInstance():getVisibleOrigin()
    self.schedulerID = nil
end

function GameScene:playBgMusic()

end

function GameScene:createLayer()
    local layer = cc.Layer:create()

    -- 背景
    local sprite_background = cc.Sprite:create("farm.jpg")
    sprite_background:setPosition(self.visibleSize.width/2, self.visibleSize.height/2)
    sprite_background:setScale(1.2)
    layer:addChild(sprite_background)

    -- a1)保存されている"SCORE"の値を取得 ない場合は0
    local score = cc.UserDefault:getInstance():getIntegerForKey(KEY, 0)

    -- 得点ラベルを追加
    local label = cc.Label:createWithSystemFont(score, "Arial", 50)
    label:setPosition(100,900)
    layer:addChild(label)

    -- タッチ開始時に呼ばれる
    local function onTouchBegan(touch, event)
        local location = touch:getLocation()

        -- 得点を1足して得点表示を更新
        score = score + 1
        label:setString(score)

        -- a2)得点情報を"SCORE"に保存する
        cc.UserDefault:getInstance():setIntegerForKey(KEY, score)

        return true
    end

    -- タッチイベントで呼ばれる関数を登録し、このレイヤーでのタッチイベント取得を有効化
    local listener = cc.EventListenerTouchOneByOne:create()
    listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
    local eventDispatcher = layer:getEventDispatcher()
    eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)

    return layer
end

return GameScene

a1)のcc.UserDefault:getInstance():getIntegerForKey(KEY, 0)が保存された値を読み出すAPIです。ここでKEYの部分は任意の文字列を指定できます。ここでは"SCORE"を指定しています。また、第二引数の0は、保存された値がないときに返されます。つまり、"SCORE"の値を読み出せ、但し保存された値がない場合は0を返せ、という意味です。

a2)cc.UserDefault:getInstance():setIntegerForKey(KEY, score)で"SCORE"の値を保存しています。第二引数の値が"SCORE"の値として保存されます。

初回起動時は、左上の表示が0ですが、

何回か画面をタッチしてから、再度起動すると、保存されたタッチ回数が起動時にすぐ表示されます。

今後の予定

Cocos2d-xでゲームを作るときに有用な、表示桁数の指定や、時間の取得を行う等、いくつかのLuaの関数について説明します。