cocos2dx 2.1.4 程序运行脉络解析3—解析CCEGLView

时间:2023-02-09 14:39:04

这篇主要是要解决上一篇遗留下的突出问题:

回忆上两篇分析程序运行时有这么几个函数很容易混淆,我按照顺序先一次将他们列出来:

main函数:

CCEGLView* eglView = CCEGLView::sharedOpenGLView();

    eglView->setViewName("HelloCpp");
    eglView->setFrameSize(2048, 1536);///////设置frame的大小,标号1
    // The resolution of ipad3 is very large. In general, PC's resolution is smaller than it.
    // So we need to invoke 'setFrameZoomFactor'(only valid on desktop(win32, mac, linux)) to make the window smaller.
    eglView->setFrameZoomFactor(0.4f);///////设置view frame的缩放比例,标号2


AppDelegate::applicationDidFinishLaunching()函数:

    CCDirector* pDirector = CCDirector::sharedDirector();//初始化director
    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
    pDirector->setOpenGLView(pEGLView);///////设置关联到director中并设置director的winSizeInPoints属性与view的resolutionSize相等,标号3
// Set the design resolution
pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionNoBorder);///////设置view的分辨率,标号4

... ...

pDirector->setContentScaleFactor(...)///////设置director的缩放比例,标号5


归纳一下,对于缩放比例一共有3种:

1.CCEGLViewProtocol中的 m_fScaleX,m_fScaleY

2.CCEGLView 的 frameZoomFactor:m_fFrameZoomFactor

3.CCDirector的 m_fContentScaleFactor

我带着分不清这3中scale的疑惑来解析下面的东西:


好!先看CCEGLViewProtocol

里面的最重要的函数:

进行相关设置后director会重新设置投影矩阵:


在设置投影矩阵前它先设置了screen map的viewPort:


至于director的m_fContentScaleFactor,查看代码它只设置完属性后将坐下脚的label进行了相关的处理而且其他模块也没有用到该属性值,所以就无视他吧~~~

给出他的代码:

先写到这,分析代码的东西都分析完毕,以后有时间贴几个测试的结果上去,感谢看完这篇文章的淫~~~

有错误欢迎之处哈!