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

转载于:http://blog.csdn.net/leoncoder/article/details/12623559

// 这里讲解的是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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值