首页 > 代码库 > cocos2d_x_04_计时器_数据存储

cocos2d_x_04_计时器_数据存储

一、计时器的使用
效果图:点击屏幕,移动头像至指定位置后,停止计时器

类型为SEL_SCHEDULE实质是一个函数指针,指向的是Ref的一个成员方法,参数float,返回值void

场景的.h头文件

场景类的实现.cpp文件
关键代码:


//
//  UpdateScene.cpp
//  01_cocos2d-x
//
//  Created by beyond on 14-10-5.
//
//

#include "UpdateScene.h"
USING_NS_CC;
Scene* UpdateScene::createScene()
{
    // 'scene' 自动释放
    // 创建一个scene
    auto scene = Scene::create();
    // 'layer' 自动释放
    auto layer = UpdateScene::create();
    // 将图层 添加到场景中
    scene->addChild(layer);
    // 返回 填充好图层的 场景
    return scene;
}

// 在 "init" 方法中,实例化自己要用的精灵对象
bool UpdateScene::init()
{
    // 1. 调用父类的init , cpp 没有super,直接写父类名
    if ( !Layer::init() ) return false;
    // 屏幕尺寸
    winSize = Director::getInstance()->getVisibleSize();
    
    // 添加 一个精灵,点击屏幕后,精灵在update方法中 更改位置
    addSprite();
    
    // 添加一个LabelTTF,点击文字后,在updatePosition方法中 更改位置
    addLabelTTF();
    return true;
}
#pragma mark - 初始化
// 添加一个精灵,点击屏幕后,精灵在update方法中 更改位置
void UpdateScene::addSprite()
{
    // 精灵精灵Nana
    nana = Sprite::create("nanaLogo.png");
    nana->setAnchorPoint(Point(0,0));
    nana->setPosition(Point(0,0));
    this->addChild(nana);
    
    // 2.触摸屏幕,开启 时钟update
    
    // 实例化一个触摸监听器 对象
    auto listener = EventListenerTouchOneByOne::create();
    // 当触摸开始时,绑定一个闭包函数;
    // 【】表示 要传入的外界对象,此处是this
    // ()表示参数
    listener->onTouchBegan = [this](Touch *t,Event *e){
        // 开启默认的 时钟方法
        scheduleUpdate();
        return false;
    };
    // 5、获取事件分发器,添加一个事件监听器,到this身上;即监听的是this对象【整个图层Layer】
    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
    
}
// 添加一个LabelTTF,点击文字后,在updatePosition方法中 更改位置
void UpdateScene::addLabelTTF()
{
    // Label
    label = LabelTTF::create("Nana","Courier",90);
    label->setAnchorPoint(Point(0,0));
    label->setPosition(Point(0,0));
    label->setName("label");
    addChild(label);
    
    // 2.触摸Label,开启 时钟updatePosition
    // 实例化一个触摸监听器 对象
    auto listener = EventListenerTouchOneByOne::create();
    // 当触摸开始时,绑定一个闭包函数;
    // 【】表示 要传入的外界对象,此处是this
    // ()表示参数
    listener->onTouchBegan = [this](Touch *t,Event *e){
        // 如果 点击 了label,才每隔一秒执行一次 更新位置方法
        LabelTTF *label =(LabelTTF *) e->getCurrentTarget()->getChildByName("label");
        if (label->getBoundingBox().containsPoint(t->getLocation())) {
            // 开启指定时间的 时钟方法;参数是:函数指针,返回值是void,参数是float,指向的是Ref内的一个方法
            schedule(schedule_selector(UpdateScene::updatePosition), 1);
        }
        return false;
    };
    // 5、获取事件分发器,添加一个事件监听器,到this身上;即监听的是this对象【整个图层Layer】
    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
    
}
#pragma mark - 时钟方法
// 时钟方法,使用的是默认的帧率 1/60
void UpdateScene::update(float dt)
{
    // 向右上角,移动nana,当位置大于 400时,stop
    nana->setPosition(nana->getPosition()+Point(3,3));
    if (nana->getPosition().x>400) {
        // 停止时钟方法
        unscheduleUpdate();
    }
    
}

// 时钟方法,使用的是 1秒1次
void UpdateScene::updatePosition(float dt)
{
    // 向右上角,移动nana,当位置大于 400时,stop
    label->setPosition(label->getPosition()+Point(50,50));
    if (label->getPosition().x>300) {
        // 停止所有时钟方法
        unscheduleAllSelectors();
    }
    
}




二、用户偏好UserDefault


三、FileUtils文件操作工具类
它屏蔽了不同的平台mac ios android等


FileUtils文件写出和读入演示
如果是Mac平台,则可用目录就是:【/Users/beyond/Documents/
如果是iOS平台,则可用目录就是:【.../app/Documents/

四、Plist文件读取

使用的依然是FileUtils工具类

返回的类型是:字典【ValueMap数组【ValueVector

五、XML文件读取



六、JSON文件读取























cocos2d_x_04_计时器_数据存储