首页 > 代码库 > Cocos2d-x 3.0 Schedule in Node

Cocos2d-x 3.0 Schedule in Node

***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************


啊哈~,做完这个开始准备做一些真正的小游戏耍一耍咯~

打地基,很重要,地基打好了,可以开始别的东东啦    ~\(≧▽≦)/~啦啦啦



这次学习的东东,是计划任务,顾名思义,不需要自己动手,它自己按照一定顺序执行的东东。

最常见的,就是很多手游里的一些开始界面中,动态的背景。


在上一次学习中,学习了屏幕触摸和消息分发机制,

最后实现了,我们触摸屏幕,然后精灵会移动到所触摸的位置。

而这次,要实现的就是,让角色自己,从左向右运动(反复)。


在cocos2d-x中,有一个大循环,它以每秒60帧的速度,不断刷新屏幕,

而我们要加入自己的计划任务,就需要利用它的这个频率,将我们自己的任务添加的这个大循环中。

首先,制定自己的更新函数,

在HelloWorldScene.h中添加update函数:

// for schedule
void update( float t );



然后在.cpp中制定动作,

我们的动作就是让 精灵 从左向右移动,就是用setPosition就可以了,

反复移动,就是加一个判断语句,大于右面边界则 从最左面重新开始移动。

void HelloWorld::update( float t )
{
	auto sprite=this->getChildByTag(33);
	sprite->setPositionX(sprite->getPositionX()+1);
	// 具体大于多少,看你屏幕宽度为多少啦~
	if( sprite->getPositionX() > 960 )
		sprite->setPositionX(0);
}



最后,别忘了,在init函数中,加入计划任务哟~

// 添加计划任务
this->scheduleUpdate();		//添加update任务



这样,运行一下,就可以发现,

不用自己触摸屏幕,你的精灵可以,慢慢从中间移动到右面,再从左面移动到右面,

为什么开始是从中间移动到右面呢?

BUG?!  NO!!!

因为我们设置精灵,初始位置是在正中间呀~


OK,做到这,你可以发现,我们的频率是固定的,那...我们能控制移动的速度吗?

Of  Course!


方法一:

 简单点,设置一个计数变量,

我们可以在类中,定义一个计数变量 js ,

然后,每次调用update函数的时候,js++

只要js<10 ,则返回,不执行下面的语句,

当js==10时,则可以继续执行,最后让js归于0。

通过上述控制,我们可以将 每秒60速度,降到 每秒6的速度:

( 不止要在.h文件声明 js 变量,也要在Init函数中初始化为0 哟)

void HelloWorld::update( float t )
{
	++js;
	if( js<10 )	return;

	auto sprite=this->getChildByTag(33);
	sprite->setPositionX(sprite->getPositionX()+1);
	// 具体大于多少,看你屏幕宽度为多少啦~
	if( sprite->getPositionX() > 960 )
		sprite->setPositionX(0);
	js=0;
}


方法二:

自带方法:

schedule(schedule_selector(_SELECTOR),float time);

两个参数,第一个就是调用哪个函数,第二个就是每隔多长时间调用。

this->schedule(schedule_selector(HelloWorld::update),1);

void HelloWorld::update( float t )
{
	auto sprite=this->getChildByTag(33);
	sprite->setPositionX(sprite->getPositionX()+1);
	// 具体大于多少,看你屏幕宽度为多少啦~
	if( sprite->getPositionX() > 960 )
		sprite->setPositionX(0);
}

这样,每隔1秒,调用一次update函数,当然你也可以换一个函数调用。



and,还有关于计划任务的其他选项:

——启动

——暂停

——停止

——恢复

这些在  cocos2d-x提供的测试程序中有详细使用方法,这里就先不说啦~


恩,Today,就到这里吧!

(要熄灯啦~╭(╯3╰)╮)



***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************

Cocos2d-x 3.0 Schedule in Node