• 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********************************************

  • 相关阅读:
    服务器上的 Git
    进程有哪几种基本状态,在一个系统中为什么必须区分出这几种状态?
    什么是进程,进程与程序的主要区别是什么?
    什么是与时间有关的错误,是举例说明。
    试解释下列名词:程序的顺序执行,程序的并发执行。
    简述系统调用的执行过程?
    假定某系统提供硬件的访管指令(例如形式:“svc n”),为了实现系统调用,系统设计者应做哪些工作?用户又如如何请求操作系统服务?
    什么是系统调用,对操作系统的服务请求与一般子程序调用有什么区别?
    Windows系统提供什么样的接口,Unix、Linux系统的用户接口是什么?
    用户与操作系统的接口是什么?一个分时系统提供什么接口?一个批处理系统又提供什么接口?
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6992700.html
Copyright © 2020-2023  润新知