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

这个项目写到现在所有的功能都在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();
	}
}


 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值