这篇主要是要解决上一篇遗留下的突出问题:
回忆上两篇分析程序运行时有这么几个函数很容易混淆,我按照顺序先一次将他们列出来:
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进行了相关的处理而且其他模块也没有用到该属性值,所以就无视他吧~~~
给出他的代码:
先写到这,分析代码的东西都分析完毕,以后有时间贴几个测试的结果上去,感谢看完这篇文章的淫~~~
有错误欢迎之处哈!