[置顶] 【cocos2d-x入门实战】微信飞机大战之二:别急,先处理好CCScene和CCLayer的关系

转载请表明地址:http://blog.csdn.net/jackystudio/article/details/11713197

在整个游戏开始之前,我们先看一下HelloWorld示例中CCScene和CCLayer之间的关系是怎么处理的。

 

//HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__

#define __HELLOWORLD_SCENE_H__



#include "cocos2d.h"



class HelloWorld : public cocos2d::CCLayer

{

public:

    virtual bool init();  



    static cocos2d::CCScene* scene();//通过此函数获取场景指针



    LAYER_CREATE_FUNC(HelloWorld);

};



#endif // __HELLOWORLD_SCENE_H__
//HelloWorldScene.cpp

#include "HelloWorldScene.h"



USING_NS_CC;



CCScene* HelloWorld::scene()

{

    CCScene *scene = CCScene::create();//创建并返回场景指针

    

    HelloWorld *layer = HelloWorld::create();



    scene->addChild(layer);



    return scene;

}



bool HelloWorld::init()

{

    if ( !CCLayer::init() )

    {

        return false;

    }

    return true;

}

 

cocos2d-x的示例中采用的是创建一个继承于CCLayer的HelloWorldScene,然后通过HelloWorldScene这个Layer中提供一个产生CCScene的指针的静态函数,获取场景的指针,载入场景。

但是我们这里并不打算这么做,通过一个CCLayer的子类来获取CCScene的指针,这样用起来很奇怪,所以,我把CCScene和CCLayer严格的分开来使用。

1.创建GameScene类继承于CCScene。

2.创建GameLayer类继承于CCLayer。

3.为GameScene添加成员变量 GameLayer* _gameLayer。

4.在GameScene的init里把_gameLayer add到场景中。

这样就能把GameScene和GameLayer结合起来,同时又分工独立。在后面的其他场景也是这样进行处理的。GameScene的结构如下。

 

//GameScene.h

#pragma once



#include "cocos2d.h"

#include "GameLayer.h"



USING_NS_CC;



class GameScene :

	public CCScene

{

public:

	

	GameScene(void);



	~GameScene(void);



	SCENE_CREATE_FUNC(GameScene);



	virtual bool init();



	GameLayer* _gameLayer;//把GameLayer暴露给GameScene



};
//GameScene.cpp

#include "GameScene.h"



GameScene::GameScene(void)

{

	_gameLayer=NULL;

}



GameScene::~GameScene(void)

{

}



bool GameScene::init()

{

	bool bRet=false;

	do 

	{

		CC_BREAK_IF(!CCScene::init());

		_gameLayer=GameLayer::create();//在这里获取GameLayer实例

		CC_BREAK_IF(!_gameLayer);

		this->addChild(_gameLayer);//add _gameLayer到场景中

		bRet=true;

	} while (0);



	return bRet;

}

而GameLayer就不再产生场景指针了。导演类直接从GameScene中获取场景指针。GameLayer其余部分的结构和HelloWorldScene就一致了。

 

//AppDelegate.cpp

CCScene *pScene = GameScene::create();

pDirector->runWithScene(pScene);


 

 

 

你可能感兴趣的:(cocos2d-x)