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

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3