`
buerkai
  • 浏览: 169570 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

cocos2d初始化

 
阅读更多
首先,winmain创建AppDelegate,AppDelegate继承于CCApplication,其构造函数获取应用程序句柄,以及设置动画。紧接着,创建单例CCApplication,接着cocos2d::CCApplication::sharedApplication().run();。
    在里面,执行PVRFrameEnableControlWindow,这儿是设置与获取注册表里的值,具体没怎么细看,但把参数设为true,出现一个对话框,暂且不管。接着QueryPerformanceFrequency(&nFreq);QueryPerformanceCounte r (&nLast);查询cpu频率及其计数。
    然后initInstance(),根据平台创建窗口,win32是创建了一个CCEGLView,其构造函数初始化cctouch,ccset,以及设备摆放位置,设置了空的视口矩阵列,,CCEGLView是个基类,没有继承任何东西,且 里面有个全局的静态对象单例s_pMainWindow,用于处理消息,构造完后,开始create,这儿就是win32的WNDCLASS的创建,接着创建CreateWindowEx()都是windows的,存储横屏或竖屏,接着,resize()计算视口。

创建egl<这儿是openGL es>的内容,得到窗口并拿到dc,从dc里获取EGLDisplay eglDisplay;CC_BREAK_IF(EGL_NO_DISPLAY == (eglDisplay = eglGetDisplay(pEGL-> m_eglNativeDisplay)));。eglInitialize(eglDisplay, &nMajor, &nMinor),初始化egl,并判断主版本是否为1,指定configList,直接看配置信息,

const EGLint aConfigAttribs[] =

                     {

                            EGL_LEVEL,                      0,

                            EGL_SURFACE_TYPE,             EGL_WINDOW_BIT,

                            EGL_RENDERABLE_TYPE,      EGL_OPENGL_ES2_BIT,

                            EGL_NATIVE_RENDERABLE,  EGL_FALSE,

                            EGL_DEPTH_SIZE,                   16,

                            EGL_NONE,

                     };

直接使用eglChooseConfig配置,得到eglContext = eglCreateContext(eglDisplay, eglConfig, NULL, NULL);设备上下文,得到eglSurface = eglCreateWindowSurface(eglDisplay, eglConfig, pEGL->m_eglNativeWindow, NULL);,激活context,eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext));从此就有了egl与系统无关的中间层对象了。

好了,终于,我们总算拥有了一个与设备无关与系统无关的eglWnd对象了,总之跨平台是个艰难的过程。整个系统初始化告一段落,接着调用用户接口,applicationDidFinishLaunc hing(),这玩意就是用户要去弄的初始化,一般用于操纵单例CCDirector。

上面一直没说CCDirector这个单例,早在create时,因为窗口需要判断是否横竖屏,而横竖屏是CCDirector中创建,它负责scene的管理及时间,以及内存自动管理。以后专门用一节分析其垃圾回收,内存管理是必不可少的,否则怎么内存泄漏都不清楚。

扯了半天,先把这一帧弄完,回到正题,CCDirector首先设置了eglView。

在里面设置一些默认参数,开启Alpha,开启深度缓存,设置3d透视矩阵,里面全是熟悉的opengl函数,这玩意看着亲切glEnable(GL_BLEND);glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST);,还有这东东:glClearDepth(1.0f); glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL);,设置矩阵时有一个魔数,估计是经验值, m_obWinSizeInPixels.height / 1.1566f,这个1.1566f不知怎么来的,反正后面是glLookAt设置相机Z坐标的东东,glViewport之类设置视口,直接上代码

    glMatrixMode(GL_PROJECTION);

              glLoadIdentity();

              gluPerspective(60, (GLfloat)size.width/size.height, 0.5f, 1500.0f);

                   

              glMatrixMode(GL_MODELVIEW);   

              glLoadIdentity();

              gluLookAt( size.width/2, size.height/2, zeye,

                             size.width/2, size.height/2, 0,

                             0.0f, 1.0f, 0.0f);

接着清颜色glClearColor(0.0f, 0.0f, 0.0f, 1.0f);,显示帧率,用到了CCLabelTTF,这个继承于CCSprite,这个源码以后重点解析,我猜测是CCLabelTTF里存储了文字,并用FreeType库光栅化文字为图片变成精灵贴上去的。

继续往下,更新缩放因子,接着事件分发器构造,又一个单例,初始化事件分发器,事件处理源码分析时再解析,把事件分发器交给创建的主窗口,设置接收事件。好了setOpenGLView结束。

设置显示帧率,设置帧间隔<以前没注意CCDirector的单例是其CCDisplayLinkDirector子类>,设置帧间隔这儿停止动画,动画开始,获取时间,获得时钟频率,设置。



创建用户Scene的Layer,(这儿调Scene的Init(),以及用户Layer的init——例如放ccsprite进去),接下Run的工作是把Scene压入栈中,并再次设置动画开始,获取更新时间,初始化结束。

分享到:
评论

相关推荐

    cocos2d-x 摇杆

    在iOS平台上,main.m通常会包含AppDelegate的实例化和Cocos2d初始化代码,从而确保ccjoystick可以正确地在游戏场景中加载和显示。 【cocos2d_Joystick_Prefix.pch】是预编译头文件,通常包含一些全局的宏定义和导入...

    cocos2d-x-cocos2d-x-2.2.2.zip

    这是初始化cocos2d-x项目的重要步骤,只有当所有依赖都正确安装后,才能顺利进行后续的开发工作。 在cocos2d-x 2.2.2中,渲染系统得到了优化,支持OpenGL ES 2.0,使得在移动设备上运行游戏时的图形效果更加出色。...

    cocos2d-x-3.1.zip

    13. **工具集**:包含了一个完整的工具链,如Cocos Studio用于界面设计,Cocos Console用于命令行操作,以及Project Creator用于项目初始化等。 14. **版本控制**:3.1版本发布后,Cocos2d-x经历了一系列的迭代和...

    Cocos2d-html5

    1. **index.html**:这是Web应用的入口文件,通常包含初始化Cocos2d-html5引擎的代码和其他必要资源的引用。 2. **README.mdown**:这是一个Markdown格式的文档,通常包含项目的简介、安装指南、使用方法等重要信息...

    cocos2d-x API中文文档

    这种设计模式使得在C++中,类的构造过程分为两个阶段:第一阶段是设置成员变量的默认值,第二阶段是在`create()`函数中进行逻辑初始化。这样的设计提高了代码的可读性和可维护性。 在Cocos2d-x的家族中,还有其他...

    cocos2d-x 跑酷源码

    1. `GameScene`类:主要负责游戏场景的初始化,包括地图加载、角色创建、动画设置等。 2. `Player`类:代表玩家角色,可能包含移动、跳跃等方法,同时关联物理体实现碰撞检测。 3. `Obstacle`类:障碍物对象,可能有...

    cocos2D源代码

    4. **install-templates-msvc.bat** 和 **install-templates-xcode.sh**:这两个脚本分别用于在Visual Studio和Xcode中安装cocos2D-x的项目模板,简化新项目的初始化过程。 5. **CHANGELOG**:记录了cocos2D-x版本的...

    cocos2d-x+socket

    1. 初始化Socket:根据操作系统选择相应的Socket库,创建Socket实例。 2. 建立连接:调用connect()函数,传入服务器的IP和端口,完成连接。 3. 数据传输:连接成功后,可以使用send()和recv()函数进行数据的发送和...

    Cocos2d-x 3.x制作2048

    在《Cocos2d-x 3.x制作2048》这本书中,作者详细介绍了使用Cocos2d-x 3.0版本,通过C++语言开发2048游戏的全过程。2048是一款非常流行的数字拼接游戏,玩家需要通过滑动屏幕上下左右来移动数字卡片,相同数字的卡片...

    cocos2d-x 初级粒子爆炸特效

    在`main.cpp`中,你需要导入必要的库,如`cocos2d::CCApplication`,并重写`applicationDidFinishLaunching`方法来初始化Cocos2d-x环境,并创建游戏场景。在这里,你将调用粒子系统的API来创建爆炸特效。 `...

    cocos2d粒子编辑器 particle_builder -windows

    particle_builder是cocos2d-x为开发者设计的一款图形化粒子特效编辑器,适用于Windows操作系统。它允许用户通过直观的界面来创建、调整和预览粒子效果,无需编程知识,大大降低了特效制作的门槛。用户可以自定义粒子...

    cocos2d-x 双指缩放,单指拖动,双击自动放大地图

    这通常在`Layer`或`Scene`类的初始化方法中完成: ```cpp setTouchEnabled(true); ``` 然后,重写`onTouchesBegan`, `onTouchesMoved`和`onTouchesEnded`方法,用以处理触摸开始、移动和结束事件。在`...

    cocos2d-x-3.5+vs2012模板

    6. 创建一个新的源文件,例如"main.cpp",并在其中编写cocos2d-x的初始化代码,如`int main(int argc, char* argv[])`和`AppDelegate::applicationDidFinishLaunching()`。 完成上述步骤后,你应该能够在VS2012中...

    cocos2d-x TableView 分析

    cocos2d-x TableView 分析 Cocos2d-x TableView 分析是游戏开发中经常遇到的问题之一。TableView 是一个常用的 UI 组件,用于显示大量数据,但是它的使用也存在一些问题。下面我们将对 TableView 的使用进行分析,...

    Cocos2d-x 2048

    1. 初始化游戏板:创建一个指定大小的二维数组,初始化数字并显示在屏幕上。 2. 数字移动:根据用户的滑动事件,实现矩阵的移动操作。 3. 数字合并:检测相邻的相同数字并进行合并,同时更新游戏得分。 4. 游戏结束...

    Cocos2d-x demo程序

    1. **初始化与场景管理**:Cocos2d-x 使用Scene对象来表示游戏中的不同阶段或关卡。每个Scene由多个Layer组成,Layer负责处理特定的游戏逻辑或UI元素。在Demo中,可能会有初始化Scene的代码,展示了如何创建和切换...

    Cocos2d-html5 references/cocos2d-html5文档

    通过阅读文档,你可以学习如何初始化Cocos2d引擎,创建场景和层,添加精灵,使用动作和定时器,处理用户输入,以及实现复杂的动画和物理效果。此外,文档还可能涵盖了调试工具、性能优化建议以及与其他库的集成方法...

    cocos2d-x+lua游戏demo源码

    - **main.lua**:游戏的入口文件,通常在这里初始化场景和设置主循环。 - **Info.plist**:iOS应用的配置文件,包含应用信息和权限设置。 通过分析和理解这个项目,开发者可以学习到如何在cocos2d-x中使用lua编写...

    cocos2d-x--simple-Game.rar_cocos2d_cocos2d-x

    2. **项目创建**:使用cocos命令行工具生成新的项目模板,这将自动生成基本的目录结构和初始化代码。 3. **场景与层(Scene & Layer)**:游戏中的每一个“屏幕”或“画面”可以看作是一个场景(Scene),而场景由...

    cocos2d-x游戏实例-简易动作游戏

    3. 编写代码:初始化场景,加载资源,设置游戏循环,实现游戏逻辑。 4. 测试与调试:在各个平台上运行游戏,检查性能和兼容性,修复错误。 5. 优化与发布:对游戏进行性能优化,例如减少内存占用、提高帧率等,...

Global site tag (gtag.js) - Google Analytics