您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x学习之路(8)--重构项目

2013-06-09 23:15 288 查看
这个项目写到现在所有的功能都在HelloWorldScene中完成,代码非常臃肿,所以需要对代码进行重构:

(1)分离场景和图层

新建两个类GameScene,继承CCScene,负责场景的创建以及对场景中的对象进行管理。GameLayer继承CCLayer负责绘制地图,Hero,战斗动画等

#pragma once
#include "header.h"
#include "GameLayer.h"
using namespace cocos2d;
class GameScene : public CCScene
{
public:
GameScene();
virtual ~GameScene();
//用静态方法创建变量
static CCScene *playNewGame();
//初始化 场景
virtual bool init();
//使用COCOS2D-X预定义宏,可以自动释放对象
CREATE_FUNC(GameScene);
};


bool GameScene::init()
{
GameLayer * gameLayer=GameLayer::create();
addChild(gameLayer);
return true;
}

CCScene *GameScene::playNewGame()
{
CCScene * scene=NULL;
do
{
scene=GameScene::create();
CC_BREAK_IF(!scene);
} while (0);
return scene;
}


#pragma once

#include "header.h"
#include "GameMap.h"
using namespace cocos2d;
class GameLayer : public CCLayer
{
public:
GameLayer();
~GameLayer();
virtual bool init();
CREATE_FUNC(GameLayer);
public:
//自定义类 继承CCTMXTieldMap
GameMap * m_gameMap;
};

暂时只创建GameMap

bool GameLayer::init()
{
m_gameMap=GameMap::gameMapWithTMXFile("1.tmx");
addChild(m_gameMap);
}


自定义类GameMap继承CCTMXTiledMap

#pragma once

#include "header.h"
using namespace cocos2d;

typedef enum{
Moveble=0,
Wall=1,
Enemy=2
}CollisionType;

class GameMap : public cocos2d::CCTMXTiledMap
{
//cocos2d-x自定义宏,相当于声明变量,并且声明Get,Set方法
CC_PROPERTY_READONLY(CCTMXLayer*,floorLayer,FloorLayer);
CC_PROPERTY_READONLY(CCTMXLayer*,wallLayer,WallLayer);
public:
GameMap();
~GameMap();
//坐标转换
static GameMap * gameMapWithTMXFile(const char * tmxFile);
cocos2d::CCPoint positionToCocos2d(cocos2d::CCPoint tileCoord);
cocos2d::CCPoint positionToTileCoord(cocos2d::CCPoint cocosCoord );//碰撞检测
CollisionType checkCollision(CCPoint heroPotion);protected:
//其他的初始化部分
void extraInit();
//开启抗锯齿
void enableAntiAliasTex();

};


部分函数

GameMap * GameMap::gameMapWithTMXFile(const char * tmxFile)
{
GameMap * gameMap = new GameMap();
if (gameMap->initWithTMXFile(tmxFile))
{
gameMap->extraInit();
gameMap->autorelease();
return gameMap;
}
CC_SAFE_DELETE(gameMap);
return NULL;
}

void GameMap::extraInit()
{
enableAntiAliasTex();
floorLayer=this->layerNamed("floor");
wallLayer=this->layerNamed("wall");
}

void GameMap::enableAntiAliasTex()
{
CCArray * pchildArray=this->getChildren();
CCSpriteBatchNode *child=NULL;
CCObject * pobject=NULL;
CCARRAY_FOREACH(pchildArray,pobject)
{
child=(CCSpriteBatchNode*)pobject;
if(!child)
break;
child->getTexture()->setAntiAliasTexParameters();
}
}






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: