您的位置:首页 > 理论基础 > 计算机网络

【Cocos2d-x】Cocos2d-x参考案例源码解析之二:TestCpp万变不离其宗Main入口点

2013-10-11 21:03 531 查看
// 这里讲解的是Cocos2d - X 2.20 版本的TestCpp案列

 CSDN博客:http://blog.csdn.net/leoncoder

 

 在VS的解决方案里展开TestCpp工程,其下有49个示例目录,除此之前还有几个文件:

 

AppDelegate.h/cpp : 程序控制类AppDelegate 。

controller.h/cpp:示例场景管理类TestController,用于显示所有示例的菜单。

testBasic.h/cpp:示例场景基类TestScene,用于返回到主界面场景。

testResource.h:文件资源名称字符串定义头文件

tests.h:示例总头文件

main.h/cpp:主函数及头文件

VisibleRect.h/cpp:自适应屏幕分辨率

/*

在游戏中使用相对位置设置坐标的好处是显而易见的,这样就不需要为每个分辨率都定义一套坐标了。

首先得定义一些参考点,引擎的TestCpp例子中就提供了一种方法,

以屏幕上可视区域的9个点作为参考点,相当于在该矩形内写一个米字,

这9个点分别是:左上、左、左下、下、右下、右、右上、上、中心。

*/

 

 

 

// -- Main.cpp

#include "main.h"
#include "AppDelegate.h"
#include "CCEGLView.h"

USING_NS_CC;

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR    lpCmdLine,
int       nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

// create the application instance
// 实例化一个Cocos2d-x程序对象
AppDelegate app;
// 获得EGLView单例 创建OpenGL视窗并设置窗口大小
CCEGLView* eglView = CCEGLView::sharedOpenGLView();
// 设置页面名称
eglView->setViewName("TestCpp");
// 设置屏幕画面大小
eglView->setFrameSize(960, 640);
// 调用应用程序平台实现类 运行程序对象
return CCApplication::sharedApplication()->run();
}


其中AppDelegate是最主要的类,代理运行着整个应用程序,它的体系如下:



 

简化流程如下所示:



 

而CCEGLView是整个程序窗口类,游戏的显示、表现等等都在这上面进行,跟AppDelegate合起来的流程如下:



 

在CCApplication::run()中调用了applicationDidFinishLaunching()函数,代码如下:

applicationDidFinishLaunching函数就是处理导演类和场景开始及资源的适配:

这里程序被挂起

bool AppDelegate::applicationDidFinishLaunching()
{
// As an example, load config file
// XXX: This should be loaded before the Director is initialized,
// XXX: but at this point, the director is already initialized
// D:\cocos2d-x-2.2.0\samples\Cpp\TestCpp\Resources\configs
CCConfiguration::sharedConfiguration()->loadConfigFile("configs/config-example.plist");

// initialize director
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());

// 获取屏幕画面大小
CCSize screenSize = CCEGLView::sharedOpenGLView()->getFrameSize();
// 设计屏幕大小
CCSize designSize = CCSizeMake(480, 320);
// 文件路径相关类
CCFileUtils* pFileUtils = CCFileUtils::sharedFileUtils();
std::vector<std::string> searchPaths;
// 屏幕大小  > 设计的场景大小
if (screenSize.height > 320)
{
// 设置资源大小
CCSize resourceSize = CCSizeMake(960, 640);
searchPaths.push_back("hd");
searchPaths.push_back("hd/scenetest");
// 其实 setContentScaleFactor 方法是为了适配不同资源而设计的,可以用此方法对不同资源适配,缩放等
pDirector->setContentScaleFactor(resourceSize.height/designSize.height);
}
else
{
searchPaths.push_back("scenetest");
}
//
pFileUtils->setSearchPaths(searchPaths);

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(designSize.width, designSize.height, kResolutionShowAll);
#else
/*
cocos2d-x 2.0提供了自适应屏幕分辨率的接口:setDesignResolutionSize.这个接口设置的是你的资源文件设计时对应的屏幕分辨率,如果你的资源文件是针对320*480屏幕设计的, 就使用
setDesignResolutionSize(320, 480);
cocos2d-x会根据屏幕的实际分辨率和通过此接口设置的分辨率对整个世界进行拉伸.
cocos2d-x的拉伸机制是:
m_fScreenScaleFactor = MIN((float)m_sSizeInPixel.width / m_sSizeInPoint.width,(float)m_sSizeInPixel.height / m_sSizeInPoint.height);
*/
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(designSize.width, designSize.height, kResolutionNoBorder);
#endif

// 创建场景
CCScene * pScene = CCScene::create();
// 创建图层
CCLayer * pLayer = new TestController();
// 自动释放池
pLayer->autorelease();
// 图层加入到场景中
pScene->addChild(pLayer);
// 运行场景
pDirector->runWithScene(pScene);

return true;
}


刚接触Cocos2d-x,如有错误请大家纠正,共同学习进步 

 编程QQ群:160296200

 本篇博客出Leon,转载请注明出处:http://blog.csdn.net/leoncoder/article/details/12623559
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: