首页 > 代码库 > 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文件读取
// // 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(); } }
cocos2d_x_04_计时器_数据存储
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。