
//
// 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();
}
}
原文:http://blog.csdn.net/pre_eminent/article/details/39802839