您的位置:首页 > 移动开发 > Cocos引擎

关于cocos2d-x2.2.3中定时器<update>的详细解释和使用

2014-08-14 12:21 513 查看
废话不多说了。。在网上找些 全面的介绍cocos2dx 定时器文章 还真的很难 我先来个简单的把

我直接上.h文件的代码了 都有注释的

#ifndef __up_H__
#define __up_H__

#include "cocos2d.h"
#include "cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;

class up : public CCLayer
{
public:

static CCScene*scene();
CREATE_FUNC(up);
bool init();

void update(float dt);

//定义一个精灵
CCSprite* _sprite;

//设置一个处理函数
void Handle(CCObject* sender);
//	void MyScheduleFunc(float dt);

//
int _direction;

};

#endif


下面 我贴上.cpp的代码。。都有注释的。大家可以仔细对着看点。。

#include "up.h"

CCScene *up::scene()
{
CCScene *scene = CCScene::create();
up *layer = up::create();
scene->addChild(layer);
return scene;
}
bool up::init()
{
CCLayer::init();

CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCPoint center = ccp(winSize.width / 2, winSize.height / 2);

// 让帧循环调用this->update(float dt)函数//默认的
scheduleUpdate();

//让帧循环调用指定的函数 //时间是  1/60秒   帧的循环
schedule(schedule_selector(up::MyScheduleFunc));
//自己控制   偏移   x  y

//定时器   每2秒动一下
schedule(schedule_selector(up::MyScheduleFunc, 2.0f));

//重复8次。第一次延迟3秒,之后每隔2秒调用一次 //有限次数的定时器
schedule(schedule_selector(up::MyScheduleFunc),2.0f,8,3.0f);

//调度一次   5秒钟之后调用一次定时器
scheduleOnce(schedule_selector(up::MyScheduleFunc),5.0f);

_sprite = CCSprite::create("green_edit.png");
addChild(_sprite);
//居中
_sprite->setPosition(center);
//设置上下左右
CCMenuItemFont *up = CCMenuItemFont::create("up",this,menu_selector(up::Handle));
CCMenuItemFont *down = CCMenuItemFont::create("down", this, menu_selector(up::Handle));
CCMenuItemFont *right = CCMenuItemFont::create("right", this, menu_selector(up::Handle));
CCMenuItemFont *left = CCMenuItemFont::create("left", this, menu_selector(up::Handle));

CCMenu  *menu = CCMenu::create(up, down, left, right, NULL);

addChild(menu);
//让menu对其       //格式对齐
// menu->alignItemsHorizontally();
menu->alignItemsVertically();

up->setTag(1);
down->setTag(2);
left->setTag(3);
right->setTag(4);

_direction = 0; //一开始那儿也不去

return true;
}
void up::update(float dt)
{

//如果 x轴和y轴一起加的话。就是斜着走
//如果等于 1  就UP
if (_direction == 1)
{

// dt *50 代表一秒钟 移动50个像素
//这句话的意思是每秒移动50个像素。然后重新把这个坐标设置成精灵的新坐标
_sprite->setPositionY(_sprite->getPositionY() + dt * 50);

//如果要实现不停的走。。就必须要把下面这个+ 4 删除掉
//_direction += 4;

}

if (_direction == 2)
{
// dt *50 代表一秒钟 移动50个像素
//这句话的意思是每秒移动50个像素。然后重新把这个坐标设置成精灵的新坐标
_sprite->setPositionY(_sprite->getPositionY() - dt * 500);
_direction += 4;
}
if (_direction == 3)
{
// dt *50 代表一秒钟 移动50个像素
//这句话的意思是每秒移动50个像素。然后重新把这个坐标设置成精灵的新坐标
_sprite->setPositionX(_sprite->getPositionX()+ dt * 500);
_direction += 4;
}
if (_direction == 4)
{
// dt *50 代表一秒钟 移动50个像素
//这句话的意思是每秒移动50个像素。然后重新把这个坐标设置成精灵的新坐标
_sprite->setPositionX(_sprite->getPositionX() - dt * 500);
_direction += 4;
}

}

void up::Handle(CCObject* sender)
{

CCNode *node = (CCNode *)sender;
//tag记录按那个键 tag给update用
_direction = node->getTag();

//停止定时器函数  指定停止XXX函数
//unschedule(schedule_selector(up::XXXX));

//至停止update 函数
unscheduleUpdate();

//停止所有定时器的调度
unscheduleAllSelectors();

}

void up::MyScheduleFunc(float dt)
{

//自己里面内容发挥想象
}


转载请标明出处尊重原作者 http://blog.csdn.net/crazyspopcorn_qian
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: