【cocos2d-x 3.x】02-简单看一下cocos的消息循环的步骤
2014-12-06 22:22
363 查看
帧循环
cocos是如何保持60帧一秒的
在执行完applicationDidFinishLaunching中我们自定义的初始化代码后,便开始游戏的帧循环while(!glview->windowShouldClose())
{
QueryPerformanceCounter(&nNow);
//计算当前时间与上一帧的时间间隔是否大于设定每帧的时间间隔(默认60帧/秒)
if (nNow.QuadPart - nLast.QuadPart >_animationInterval.QuadPart)
{
nLast.QuadPart= nNow.QuadPart;//重置上一帧的时间
director->mainLoop(); //开始进入主循环 mainLoop所做的事情
glview->pollEvents();
}
else
{
//如果在一帧内,已经完成循环动作,则执行这里,确保每秒帧数达到设置值
Sleep(0);
}
}
mainLoop
mainLoop,顾名思义,这是游戏的主循环void DisplayLinkDirector::mainLoop()
{
if (_purgeDirectorInNextLoop)
{ //程序退出时做一些清理工作
_purgeDirectorInNextLoop = false;
purgeDirector();
}
else if (! _invalid)
{
drawScene();//绘制场景
PoolManager::getInstance()->getCurrentPool()->clear(); //清除内存池中需要释放的资源
}
}
drawScene
在drawScene函数中完成了重绘当前场景(遍历渲染树)、刷新状态信息等动作void Director::drawScene()
{
//如果下一个场景不为空,则将当前场景替换为_nextScene
if (_nextScene)
setNextScene();
//如果当前存在运行场景
if (_runningScene)
{ //遍历场景中的子节点
_runningScene->visit(_renderer,Mat4::IDENTITY,
false);
_eventDispatcher->dispatchEvent(_eventAfterVisit);
}
//绘制信息提示层
if (_notificationNode)
{
_notificationNode->visit(_renderer,Mat4::IDENTITY,
false);
}
//左下角显示FPS等信息
if (_displayStats)
{
showStats();
}
}
_runningScene->visit(_renderer,Mat4::IDENTITY, false);函数先按照子节点的zOrder排序并递归渲染之,然后再调用自己的draw函数,最终完成该帧的渲染任务
相关文章推荐
- cocos2d游戏开发中简单人物动画开发步骤
- cocos2d-x快乐的做让人快乐的游戏3:cocos-2d 3.x中的物理世界
- Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现
- scrapy-02:创建工程项目的简单步骤
- 一个简单的带消息循环的控制面板选项例程
- 【cocos2d-x 2】关于CocosStudio编辑出的csb的简单使用
- 【cocos2d 3.x】粒子plist的简单使用
- Cocos2d-x 3.x 系列教程02-创建自定义项目
- 无需繁琐的解析XML,cocos2d-x 3.x中最简单方便粗暴有效的数据方法-plist
- 【cocos2d-x 2】关于CocosStudio编辑出的csb的简单使用
- cocos2d-x循环菜单简单例子
- 【末世旅行之Cocos2d-x】Cocos3.x中对标签Label的更改
- DirectUI消息循环的简单封装
- 关于cocos2d-x-3.x版本环境的搭建和自己创建工程的步骤
- 【Android】02. 循环取消息的 Loop 和 发送消息的Handler
- Cocos2dx杂记:Cocos2d 3.x版本 MeshSprite Cocos的网格变换(非原创)
- Cocos2d-JS中使用Cocos Studio资源02:登录界面
- 用Quick-Cocos2d-x 3.3简单开发微信打飞机 -02
- Cocos2d-x3.2中 简单循环动画的实现
- 一个简单的带消息循环的控制面板选项例程