废话不多说了。。在网上找些 全面的介绍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
浙公网安备 33010602011771号