`
buerkai
  • 浏览: 166403 次
  • 性别: 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游戏开发技术精解

    12.6.1 脚本引擎初始化 332 12.6.2 游戏内容的实现脚本 333 12.6.3 农场层的实现 334 12.6.4 菜单层的实现 337 12.7 本章小结 338 第13章 Cocos2D-HTML5引擎版本 340 13.1 概述 340 13.2 HTML的发展史 341 13.2.1 ...

    Cocos2d-x 3.0 开发(九)使用Physicals代替Box2D和chipmunk

    模拟真实的世界是个比较麻烦的事情 通常这种事情都是交给物理引擎来做 但它们使用的过程中有个令人讨厌的地方 参数太多了 为了初始化一个简单的场景要写很多代码 在cocos2d x 3 0版本中 出现了一个新类族 physicals ...

    Cocos2d-html5:Cocos2D html5 V4

    移除 Cocos2D 初始化的异步特性,支持更结构化的资源加载机制。 通过不代表开发人员做出假设和决定,让开发人员获得更多自由。 在目前的情况下,我们必须谦虚和低要求,以便: Typescript to JavaScript 编译...

    反转贪吃蛇 Cocos2d-x+lua贪食蛇游戏源码

    使用cocos2d-x lua和code ide编写的贪吃蛇小游戏 反转贪食蛇一改传统贪食蛇的玩法...###初始化 将cocos2d-x 3.1.1 创建的lua项目中,frameworks/cocos2d-x复制到framesworks publish目录下有Android的apk安装包

    cocos2d-x 3.4 中文乱码解决 iconv库

    cocos2d-x 3.4 中文乱码解决 iconv库,使用简单,只需要应用头文件,同时调用code_convert_init();初始化指针,就可以随心所欲使用啦

    cocos2d-x-dynamic-lighting:Cocos2d-x 教程

    Cocos2d-x 动态光照演示这个简单的 Cocos2d-x 项目演示了如何从精灵表加载精灵帧创建动画用法线贴图初始化点光源效果并启发你的动画这是完整的教程:设置为了保持存储库的大小,我们没有将 Cocos2d-x 本身添加到存储...

    Cocos2d-x学习入门之HelloWorld程序

    Cocos2d-x是目前非常流行的开源移动2D游戏框架。本文HelloWorld示例程序中使用的Cocos2d-x版本是2.0,主要实现一个简单的入门程序。 二、HelloWorld程序: HelloWorld程序是很多编程语言的入门程序,对于程序员来说...

    cocos2d-xna 写的一个小游戏demo坦克大战

    最近看到网上介绍cocos2d的资料很多,看了看cocos2d也支持wp7,下载了个 Cocos2d-XNA 安装包,写个小例子玩玩,熟悉下cocos2d 程序很简单,就一个入门级的小游戏,写完后放手机里运行了下效果还可以 开发环境 vs2010,...

    Cocos2d-x开发中C++内存管理

    始并没有介绍C++语言,C++的内存管理当然也没进行不论什么的说明,为了掌握Cocos2d-x中的内存管理机制,是有必要先了解一些C++内存管理的知识。  C++内存管理非常复杂,假设全然地系统地介绍可能须要一本书的篇幅...

    cocos2dx-crashlytics-sdk:用于cocos2d-x引擎的Crashlytics SDK集成(AndroidiOS)

    适用于cocos2d-x引擎的Crashlytics SDK集成(Android / iOS) 与市场领先的崩溃报告器工具本机API集成安装安装手册。 。 不要忘记使用Fabric.with(this, new Crashlytics(), new CrashlyticsNdk());初始化套件Fabric...

    C2DXShareSDKSample:cocos2d-x

    步骤1:下载ShareSDK的cocos2d-x组件 打开Github,下载项目。 将项目C2DXShareSDK文件夹复制到您的项目中。 步骤2:修改AppDelegate文件 打开“ AppDelegate.cpp”文件,导入头文件“ C2DXShareSDK.h”。 如: #...

    Android代码-hx2048

    2048游戏的逻辑实现,初始化游戏格子,上下左后四个操作。可以在lua控制台运行logic.lua,运行前找到最后一行取消注释。 -- main() 然后在控制台执行命令: $ lua scripts/logic.lua 将会出现如下界面,即可在控制台...

    Piano-cocos2d-js:简陋的钢琴游戏开发中

    参考(勉强找到一个别踩白块儿)熟悉代码,构建源程序(转为面向过程的开发),对于界面布局的一些了解,完成简单界面.2015-09-18添加touch事件(发现第一个bug:连击时block会缩小)通过初始化的方式解决action事件没...

    fruitguess:水果猜猜猜

    水果猜猜猜 水果猜猜猜是使用 cocos2d-js v3.2 开发的一款游戏,有 android 版和...# 初始化项目 grunt init 运行 grunt init 后,游戏就可以运行了,打开 game/fruitguess/index.html 查看游戏。注意一定要运行在 http

    html5 小游戏 demo

    3.子弹初始化,重画 ctor:function (x,y,good,dir,tankClient) { cc.associateWithNative( this, cc.Sprite ); this.x=x; this.y=y; this.dir=dir; this.tankClient=tankClient; this.good=good; this....

    cocos2dx 雷电MoonWarriors_游戏源码

    using namespace cocos2d; using namespace CocosDenshion; bool isPaused = false; GameLayer::GameLayer():m_state(statePlaying),m_time(0),m_ship(NULL),m_backSky(NULL),m_backSkyHeight(0),m_backSkyRe...

    lift:电梯快速而惊险

    LIFT 是一个基于 cocos2d-x 的框架,允许您使用 JavaScript 创建跨平台应用程序。 支持的平台包括 iOS、Android、Windows Phone、Windows、Mac OS X、Linux、网络浏览器等。LIFT 代表 LIFT Is Fast & Thrilling。 ...

Global site tag (gtag.js) - Google Analytics