level 7
liuxijob
楼主
这个项目写到现在所有的功能都在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();
}
}
2014年07月25日 01点07分
1
(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();
}
}