1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-09-04

目次

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ですが、

12-1.png

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

12-2.png

今後の予定

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

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?