每一个游戏程序都有一个循环在不断运行,它是有导演对象来管理很维护。如果需要场景中的精灵运动起来,我们可以在游戏循环中使用定时器(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)声明,代码如下:
- class HelloWorld : public cocos2d::Layer
- {
- public:
- ... ...
- virtual void update(float dt);
- CREATE_FUNC(HelloWorld);
- };
- 修改HelloWorldScene.cpp代码如下:
- bool HelloWorld::init()
- {
- ... ...
- auto label = LabelTTF::create("Hello World","Arial", 24);
- label->setTag(123); ①
- ... ...
- //更新函数
- this->scheduleUpdate(); ②
- //this->schedule(schedule_selector(HelloWorld::update),1.0f/60); ③
- return true;
- }
- voidHelloWorld::update(float dt) ④
- {
- auto label =this->getChildByTag(123); ⑤
- label->setPosition(label->getPosition()+ Point(2,-2)); ⑥
- }
- void HelloWorld::menuCloseCallback(Ref*pSender)
- {
- //停止更新
- unscheduleUpdate(); ⑦
- Director::getInstance()->end();
- #if (CC_TARGET_PLATFORM ==CC_PLATFORM_IOS)
- exit(0);
- #endif
- }
为了能够在init函数之外访问标签对象label,我们需要为标签对象设置Tag属性,其中的第①行代码就是设置Tag属性为123。第⑤行代码是通过Tag属性获得重新获得这个标签对象。
为了能够开始调度还需要在init函数中调用scheduleUpdate(见第②行代码)或schedule(见第③行代码)。
代码第④行的HelloWorld::update(floatdt)函数是在调度函数,精灵等对象的变化逻辑都是在这个函数中编写的。我们这个例子很简单只是让标签对象动起来,第⑥行代码就是改变它的位置。
为了省电等目的,如果不再使用调度,一定不要忘记停止调度。第⑦行代码unscheduleUpdate()就是停止调度update,如果是其他的调度函数可以采用unschedule或unscheduleAllSelectors停止。
本书交流讨论网站:http://www.cocoagame.net
《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:
京东:http://item.jd.com/11584534.html
当当: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
相关推荐
【贪吃蛇cocos2d-x】是一款基于Cocos2d-x框架开发的经典游戏示例,它详尽地展示了如何利用ccx库的各种功能来构建一个互动性丰富的2D游戏。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动设备上的游戏开发,支持...
cocos2d-x使用事件驱动模型,这意味着游戏的更新和渲染是通过事件循环来驱动的。`Scheduler`负责调度和执行定时任务,而`EventDispatcher`处理各种用户输入和其他事件。此外,cocos2d-x提供了一个强大的物理引擎Box...
例如,游戏可能使用cocos2d-x 的Scene和Layer来构建游戏界面,用Scheduler来调度游戏循环,用Action来控制角色的移动和攻击。 在cocos2d-x 中,物理引擎如Box2D可以用来处理物体碰撞和运动,这对于塔防游戏中炮塔...
在Cocos2d-x中,开发者可以利用其内置的Action(动作)系统来实现角色的移动、攻击、跳跃等复杂行为,通过Scheduler(调度器)来安排游戏循环和定时事件,而Physics Engine(物理引擎)则可以帮助创建真实的碰撞检测...
总的来说,Cocos2d-x与Lua的结合为开发者提供了高效、易用的游戏开发环境。通过熟练掌握这些基础知识,你可以快速构建出富有互动性和趣味性的2D游戏。在实际项目中,应根据需求不断学习和实践,提升开发效率和游戏...
4. 游戏循环和调度:Cocos2d-x遵循游戏开发中的典型模式,包括游戏循环的设计和调度器的使用。游戏循环负责游戏的更新和渲染,而调度器则用于管理各种游戏事件、动画和定时任务。 5. 资源管理:在游戏开发中,资源...
在Cocos2D-X中,时间调度是游戏循环的重要组成部分,它允许开发者在特定的时间间隔内执行某些函数或操作。`schedule`函数是实现这一功能的关键,它允许你设置一个定时器来调用指定的函数,这在处理动画、更新游戏...
在Cocos2d-x中,游戏的主循环由`Director`类控制,它负责调度场景的切换、渲染、事件处理等。在雷电战机游戏中,`GameScene`类的`update`方法会被定期调用,用于处理游戏的实时状态,如移动、碰撞检测、计分等。同时...
总的来说,这个示例将帮助开发者理解如何在Cocos2d-x中创建交互式UI,利用CCControl类及其子类来设计游戏的控制界面,使玩家能够与游戏进行互动。通过学习这个示例,开发者可以更深入地掌握Cocos2d-x的游戏开发技巧...
cocos2d-x提供了`cocos2d::Director::getScheduler()`来调度任务,或者可以使用第三方库如poco来实现线程和异步操作。 6. **序列化与反序列化** 由于数据在网络中传输时需要转换成字节流,我们通常需要对消息进行...
《cocos2d-x塔防游戏源码解析与学习指南》 Cocos2d-x是一款跨平台的游戏开发框架,基于C++,支持iOS、Android、Windows等多平台运行。本篇将围绕“cocos2d-x塔防游戏源码”进行深入探讨,以《KingdomRush》为模仿...
Cocos2d-x是一款开源的游戏开发框架,广泛用于2D游戏、实时应用和互动媒体的开发。这个“Cocos2d-x3.15离线文档”提供了完整的API参考,帮助开发者在没有网络的情况下查阅和理解框架的功能。Cocos2d-x基于C++,同时...
《cocos2d-x小游戏小狗快跑源码详解》 cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于2D游戏的开发。它基于C++,支持多种编程语言,包括JavaScript和Lua,使得开发者能够在iOS、Android、Windows等多个...
同时,游戏逻辑通常与时间有关,cocos2d-x的调度器(Scheduler)可以帮助你准确地控制游戏循环和定时任务。 在Java环境下使用cocos2d-x,你需要知道如何利用JniBridge进行Java和C++间的通信。这涉及到JNI(Java ...
Cocos2d-x的核心组件包括Director(导演),负责管理游戏的运行循环;Scene(场景),代表游戏的一个阶段或状态;Layer(层),是场景中的逻辑容器,可以包含多个精灵和其他元素。 在Cocos2d-x中,精灵是最基本的...
《Cocos2d-x太空射击游戏的开发与实践》 Cocos2d-x是一款开源的、跨平台的游戏开发框架,广泛应用于2D游戏的制作,以其高效、灵活和丰富的功能特性受到开发者们的青睐。本资源包包含了一款已经调试通过的太空射击...
Cocos2d-X是一个跨平台的游戏开发框架,广泛应用于移动游戏开发,尤其是iOS和Android平台。本部分主要探讨Cocos2d-X的深入技术细节和实践应用。 Cocos2d-X是Cocos2d-x项目的升级版本,它基于C++,同时提供了Python...
这个压缩包文件包含了用cocos2d-x框架开发的“超级玛丽”游戏的完整源码,对于学习游戏开发,尤其是使用cocos2d-x的人来说,这是一个宝贵的学习资源。 1. **游戏架构**: “超级玛丽”是一款经典的平台跳跃游戏,...
2. **节点(Node)与调度(Scheduler)**:在Cocos2d-x中,所有的游戏对象都是节点,它们可以包含子节点并执行动作。时钟通常是一个节点,可以通过`scheduleUpdate()`方法注册一个无参数的回调函数,这个函数将在每一帧...
通过对FlappyBird源码的分析,开发者不仅可以学习到Cocos2d-X的基本使用,还能掌握游戏开发的关键技巧,如游戏循环、用户输入响应、动画制作、物理模拟等。理解并复用这些源码,对于提升自己的游戏开发技能无疑...