[Cocos2d-x for WP8学习笔记] HelloWorld结构分析

Posted by baicai on July 9, 2013

先来看一下目录结构:

 

Assets:游戏资源文件,图片音频等,Resource文件夹也有类似功能

include:用于放置游戏头文件

Shaders:渲染器着色器文件(大雾)

cocos2dorig.cpp/.h:Direct3D游戏默认入口,默认文件名和项目名相同,在Cocos2dx中,经由这里转而启动AppDelegate

//WP8Direct3D游戏默认启动入口
IFrameworkView^ Direct3DApplicationSource::CreateView()
{
	return ref new PhoneDirect3DAppDemo();
}
[Platform::MTAThread]
int main(Platform::Array<Platform::String^>^)
{
	auto direct3DApplicationSource = ref new Direct3DApplicationSource();
	CoreApplication::Run(direct3DApplicationSource);
	return 0;
}

//Cocos2dx启动入口
IFrameworkView^ Direct3DApplicationSource::CreateView()
{
    return ref new cocos2dorig();
}
ref class CCApplicationFrameworkViewSource sealed : Windows::ApplicationModel::Core::IFrameworkViewSource 
{
public:
	virtual Windows::ApplicationModel::Core::IFrameworkView^ CreateView()
    {
        return cocos2d::getSharedCCApplicationFrameworkView();
    }
};
[Platform::MTAThread]
int main(Platform::Array<Platform::String^>^)
{
    //auto direct3DApplicationSource = ref new Direct3DApplicationSource();
    //CoreApplication::Run(direct3DApplicationSource);
	AppDelegate App;
	auto frameworkViewSource = ref new CCApplicationFrameworkViewSource();
	Windows::ApplicationModel::Core::CoreApplication::Run(frameworkViewSource);
    return 0;
}

AppDelegate.cpp/.h:

游戏通用入口文件,控制着游戏的生命周期 bool AppDelegate::applicationDidFinishLaunching() 游戏启动后调用这个方法

bool AppDelegate::applicationDidFinishLaunching()
{
	// 初始化游戏引擎控制器
	CCDirector *pDirector = CCDirector::sharedDirector();
	pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());

	// 开发阶段可以打开FPS显示以观察流畅度
	//pDirector->setDisplayFPS(false);

	// 设置横竖屏显示
	pDirector->setDeviceOrientation(CCDeviceOrientationPortrait);

	// 设置每秒刷新率即FPS,默认每秒60次
	//pDirector->setAnimationInterval(1.0 / 60);

	// 创建场景
	CCScene *pScene = HelloWorld::scene();

	// 运行场景
	pDirector->runWithScene(pScene);

	return true;
}

void AppDelegate::applicationDidEnterBackground() 游戏转入后台时进行的操作,一般来说,要将游戏暂停 void AppDelegate::applicationWillEnterForeground() 游戏回到前台时对应的操作

 HelloWorldScene.cpp/.h

HelloWorld游戏的场景,在AppDelegate::applicationDidFinishLaunching()中创建并运行。

CCScene* HelloWorld::scene()

场景创建

CCScene* HelloWorld::scene()
{
	CCScene * scene = NULL;
	do 
	{		
		// 创建一个空场景
		scene = CCScene::create();
		CC_BREAK_IF(! scene);

		// 创建一个HelloWorld层
		HelloWorld *layer = HelloWorld::create();
		CC_BREAK_IF(! layer);

		// 将HelloWorld层添加到场景中
		scene->addChild(layer);
	} while (0);

	return scene;
}

bool HelloWorld::init()

初始化HelloWorld类</span>

 

bool HelloWorld::init()
{
	bool bRet = false;

	do 
	{
		//调用父类方法进行初始化
		if ( !CCLayer::init() )
		{
			break;
		}

		//创建文字标签添加到层中
        CCSize size = CCDirector::sharedDirector()->getWinSize();
		CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Times New Roman", 24);
		pLabel->setPosition( ccp(size.width * 0.5, size.height * 0.5) );
		pLabel->setColor(ccc3(160, 80, 5));
		this->addChild(pLabel, 1);

		//创建显示HelloWorld的精灵并添加到层中
		CCSprite *b = CCSprite::create("HelloWorld.png");
		b->setPosition(ccp(0, 0));
		b->setPosition(ccp(size.width * 0.5, size.height * 0.5));
		this->addChild(b);

		//设置程序可以响应触摸
		setTouchEnabled(true);

		bRet = true;
	} while (0);

	return bRet;
}