`

cocos2d-x游戏循环与调度

阅读更多

每一个游戏程序都有一个循环在不断运行,它是有导演对象来管理很维护。如果需要场景中的精灵运动起来,我们可以在游戏循环中使用定时器(Scheduler)对精灵等对象的运行进行调度。因为Node类封装了Scheduler类,所以我们也可以直接使用Node中调用函数。

Node中调用函数主要有:

void scheduleUpdate ( void )。每个Node对象只要调用该函数,那么这个Node对象就会定时地每帧回调用一次自己的update(float dt)函数。

void schedule ( SEL_SCHEDULE selector,  float  interval )。与scheduleUpdate函数功能一样,不同的是我们可以指定回调函数(通过selector指定),也可以更加需要指定回调时间间隔。

void unscheduleUpdate ( void )。停止update(float dt)函数调度。

void unschedule ( SEL_SCHEDULE selector )。可以指定具体函数停止调度。

void unscheduleAllSelectors ( void )。可以停止调度。

 

为了进一步了解游戏循环与调度的使用,我们修改HelloWorld实例。

修改HelloWorldScene.h代码,添加update(float dt)声明,代码如下:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. class HelloWorld : public cocos2d::Layer  
  2. {  
  3. public:  
  4.    ... ...  
  5.    
  6.    virtual void update(float dt);  
  7.      
  8.    CREATE_FUNC(HelloWorld);  
  9.    
  10. };  
  11. 修改HelloWorldScene.cpp代码如下:  
  12. bool HelloWorld::init()  
  13. {  
  14.    ... ...  
  15.      
  16.    auto label = LabelTTF::create("Hello World","Arial", 24);  
  17.    label->setTag(123);                                                                                                                       ①  
  18.    ... ...  
  19.    
  20.    //更新函数   
  21.    this->scheduleUpdate();                                                                                                              ②  
  22.    //this->schedule(schedule_selector(HelloWorld::update),1.0f/60);                                              ③  
  23.      
  24.    return true;  
  25. }  
  26.    
  27. voidHelloWorld::update(float dt)                                                                                                      ④  
  28. {      
  29.     auto label =this->getChildByTag(123);                                                                                  ⑤       
  30.     label->setPosition(label->getPosition()+ Point(2,-2));                                                                   ⑥  
  31. }   
  32.    
  33. void HelloWorld::menuCloseCallback(Ref*pSender)  
  34. {  
  35.     //停止更新   
  36.    unscheduleUpdate();                                                                                                           ⑦  
  37.    Director::getInstance()->end();  
  38.    
  39. #if (CC_TARGET_PLATFORM ==CC_PLATFORM_IOS)  
  40.    exit(0);  
  41. #endif  
  42. }  

 

 

为了能够在init函数之外访问标签对象label,我们需要为标签对象设置Tag属性,其中的第①行代码就是设置Tag属性为123。第⑤行代码是通过Tag属性获得重新获得这个标签对象。

为了能够开始调度还需要在init函数中调用scheduleUpdate(见第②行代码)或schedule(见第③行代码)。

代码第④行的HelloWorld::update(floatdt)函数是在调度函数,精灵等对象的变化逻辑都是在这个函数中编写的。我们这个例子很简单只是让标签对象动起来,第⑥行代码就是改变它的位置。

为了省电等目的,如果不再使用调度,一定不要忘记停止调度。第⑦行代码unscheduleUpdate()就是停止调度update,如果是其他的调度函数可以采用unschedule或unscheduleAllSelectors停止。

 

 

更多内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》

本书交流讨论网站:http://www.cocoagame.net

更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群:257760386


《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:

京东:http://item.jd.com/11584534.html

亚马逊:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当:http://product.dangdang.com/23606265.html

互动出版网:http://product.china-pub.com/3770734

 

《Cocos2d-x实战 C++卷》源码及样章下载地址:

源码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

欢迎关注智捷iOS课堂微信公共平台

分享到:
评论

相关推荐

    贪吃蛇cocos2d-x

    【贪吃蛇cocos2d-x】是一款基于Cocos2d-x框架开发的经典游戏示例,它详尽地展示了如何利用ccx库的各种功能来构建一个互动性丰富的2D游戏。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动设备上的游戏开发,支持...

    cocos2d-x默认第一个模板

    cocos2d-x使用事件驱动模型,这意味着游戏的更新和渲染是通过事件循环来驱动的。`Scheduler`负责调度和执行定时任务,而`EventDispatcher`处理各种用户输入和其他事件。此外,cocos2d-x提供了一个强大的物理引擎Box...

    cocos2d-x 完整塔防源码 app store 上线游戏源码

    例如,游戏可能使用cocos2d-x 的Scene和Layer来构建游戏界面,用Scheduler来调度游戏循环,用Action来控制角色的移动和攻击。 在cocos2d-x 中,物理引擎如Box2D可以用来处理物体碰撞和运动,这对于塔防游戏中炮塔...

    Cocos2d-x横版动作手游完整源码Source

    在Cocos2d-x中,开发者可以利用其内置的Action(动作)系统来实现角色的移动、攻击、跳跃等复杂行为,通过Scheduler(调度器)来安排游戏循环和定时事件,而Physics Engine(物理引擎)则可以帮助创建真实的碰撞检测...

    Cocos2d-x 使用Lua开发基础

    总的来说,Cocos2d-x与Lua的结合为开发者提供了高效、易用的游戏开发环境。通过熟练掌握这些基础知识,你可以快速构建出富有互动性和趣味性的2D游戏。在实际项目中,应根据需求不断学习和实践,提升开发效率和游戏...

    Cocos2d-x游戏开发之旅.pdf

    4. 游戏循环和调度:Cocos2d-x遵循游戏开发中的典型模式,包括游戏循环的设计和调度器的使用。游戏循环负责游戏的更新和渲染,而调度器则用于管理各种游戏事件、动画和定时任务。 5. 资源管理:在游戏开发中,资源...

    Cocos2D-X开发学习笔记-时间调度schedule函数的使用

    在Cocos2D-X中,时间调度是游戏循环的重要组成部分,它允许开发者在特定的时间间隔内执行某些函数或操作。`schedule`函数是实现这一功能的关键,它允许你设置一个定时器来调用指定的函数,这在处理动画、更新游戏...

    Cocos2d-x手游-雷电战机加强版源码下载.zip

    在Cocos2d-x中,游戏的主循环由`Director`类控制,它负责调度场景的切换、渲染、事件处理等。在雷电战机游戏中,`GameScene`类的`update`方法会被定期调用,用于处理游戏的实时状态,如移动、碰撞检测、计分等。同时...

    cocos2d-x 的CCControl控件的示例

    总的来说,这个示例将帮助开发者理解如何在Cocos2d-x中创建交互式UI,利用CCControl类及其子类来设计游戏的控制界面,使玩家能够与游戏进行互动。通过学习这个示例,开发者可以更深入地掌握Cocos2d-x的游戏开发技巧...

    cocos2d-x 聊天小程序2: 两个客户端的数据交互

    cocos2d-x提供了`cocos2d::Director::getScheduler()`来调度任务,或者可以使用第三方库如poco来实现线程和异步操作。 6. **序列化与反序列化** 由于数据在网络中传输时需要转换成字节流,我们通常需要对消息进行...

    cocos2d-x 塔防游戏源码

    《cocos2d-x塔防游戏源码解析与学习指南》 Cocos2d-x是一款跨平台的游戏开发框架,基于C++,支持iOS、Android、Windows等多平台运行。本篇将围绕“cocos2d-x塔防游戏源码”进行深入探讨,以《KingdomRush》为模仿...

    Cocos2d-x3.15离线文档

    Cocos2d-x是一款开源的游戏开发框架,广泛用于2D游戏、实时应用和互动媒体的开发。这个“Cocos2d-x3.15离线文档”提供了完整的API参考,帮助开发者在没有网络的情况下查阅和理解框架的功能。Cocos2d-x基于C++,同时...

    cocos2d-x小游戏小狗快跑源码

    《cocos2d-x小游戏小狗快跑源码详解》 cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于2D游戏的开发。它基于C++,支持多种编程语言,包括JavaScript和Lua,使得开发者能够在iOS、Android、Windows等多个...

    cocos2d-x权威指南

    同时,游戏逻辑通常与时间有关,cocos2d-x的调度器(Scheduler)可以帮助你准确地控制游戏循环和定时任务。 在Java环境下使用cocos2d-x,你需要知道如何利用JniBridge进行Java和C++间的通信。这涉及到JNI(Java ...

    Cocos2d-x高级开发

    Cocos2d-x的核心组件包括Director(导演),负责管理游戏的运行循环;Scene(场景),代表游戏的一个阶段或状态;Layer(层),是场景中的逻辑容器,可以包含多个精灵和其他元素。 在Cocos2d-x中,精灵是最基本的...

    Cocos2d-x太空射击游戏文档/代码(调试通过)

    《Cocos2d-x太空射击游戏的开发与实践》 Cocos2d-x是一款开源的、跨平台的游戏开发框架,广泛应用于2D游戏的制作,以其高效、灵活和丰富的功能特性受到开发者们的青睐。本资源包包含了一款已经调试通过的太空射击...

    Cocos2d-X权威指南完全扫描版.part3

    Cocos2d-X是一个跨平台的游戏开发框架,广泛应用于移动游戏开发,尤其是iOS和Android平台。本部分主要探讨Cocos2d-X的深入技术细节和实践应用。 Cocos2d-X是Cocos2d-x项目的升级版本,它基于C++,同时提供了Python...

    cocos2d-x 超级玛丽

    这个压缩包文件包含了用cocos2d-x框架开发的“超级玛丽”游戏的完整源码,对于学习游戏开发,尤其是使用cocos2d-x的人来说,这是一个宝贵的学习资源。 1. **游戏架构**: “超级玛丽”是一款经典的平台跳跃游戏,...

    Cocos2d-x时钟

    2. **节点(Node)与调度(Scheduler)**:在Cocos2d-x中,所有的游戏对象都是节点,它们可以包含子节点并执行动作。时钟通常是一个节点,可以通过`scheduleUpdate()`方法注册一个无参数的回调函数,这个函数将在每一帧...

    Cocos2d-X游戏源码 FlappyBird源码.7z

    通过对FlappyBird源码的分析,开发者不仅可以学习到Cocos2d-X的基本使用,还能掌握游戏开发的关键技巧,如游戏循环、用户输入响应、动画制作、物理模拟等。理解并复用这些源码,对于提升自己的游戏开发技能无疑...

Global site tag (gtag.js) - Google Analytics