Cocos2dx游戏开发系列笔记18:《跑酷》游戏源码解析(3)

来源:未知 责任编辑:责任编辑 发表时间:2014-01-20 07:52 点击:

关于这种用法,骨头不是很熟悉,

 

首先看看 CC_SYNTHESIZE(int, _type, Type); 的源码

 

#define CC_SYNTHESIZE(varType, varName, funName)
protected: varType varName;
public: virtual varType get##funName(void) const { return varName; }
public: virtual void set##funName(varType var){ varName = var; }
应该是自动生成 set get 方法的一个宏方法。

 

第二个CC_SYNTHESIZE_READONLY(bool, _puffing, Puffing); 方法

应该也是自动生成 get 方法的宏方法。

这样肯定是会减少代码量,但对于骨头这种新手来说,比较乱容易弄混。使用时必须小心。

然后 h文件里还剩下几个 inline 内联方法。

 

inline virtual int left() {
		return this->getPositionX();
	}

	inline virtual int right() {
		return this->getPositionX() + _width;
	}

再来看下 Block.cpp 文件:

 

 

Block::~Block () {
	//安全释放
    CC_SAFE_RELEASE(_chimneys);
    CC_SAFE_RELEASE(_wallTiles);
    CC_SAFE_RELEASE(_roofTiles);
    CC_SAFE_RELEASE(_puffAnimation);
    CC_SAFE_RELEASE(_puffSpawn);
    CC_SAFE_RELEASE(_puffMove);
    CC_SAFE_RELEASE(_puffFade);
    CC_SAFE_RELEASE(_puffScale);
}
在贴砖类的析构方法里,使用了这种表达式的宏定义,去看下源码:

 

 

#define CC_SAFE_DELETE(p)            do { if(p) { delete (p); (p) = 0; } } while(0)
#define CC_SAFE_DELETE_ARRAY(p)     do { if(p) { delete[] (p); (p) = 0; } } while(0)
#define CC_SAFE_FREE(p)                do { if(p) { free(p); (p) = 0; } } while(0)
#define CC_SAFE_RELEASE(p)            do { if(p) { (p)->release(); } } while(0)
#define CC_SAFE_RELEASE_NULL(p)        do { if(p) { (p)->release(); (p) = 0; } } while(0)
#define CC_SAFE_RETAIN(p)            do { if(p) { (p)->retain(); } } while(0)
#define CC_BREAK_IF(cond)            if(cond) break

关于 表达式的宏定义里使用 do{...}while(0),好像还有讲头:等骨头学习一阵在研究。

 

同样的,构造方法里是初始化一些值,create方法里是实例化 Blocl这个CCSprite对象。

初始化街区配置信息 void Block::initBlock()

先初始化不同类型的贴砖CCsprite:

 

	_tile1 = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName (building_1.png);
	_tile2 = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName (building_2.png);
	_tile3 = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName (building_3.png);
	_tile4 = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName (building_4.png);

	_roof1 = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName (roof_1.png);
	_roof2 = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName (roof_2.png);
然后放到两个数组里:

 

 

int i;
	_wallTiles = CCArray::createWithCapacity(20);
	_wallTiles->retain();

	_roofTiles = CCArray::createWithCapacity(5);
	_roofTiles->retain();

	CCSprite * tile;

	for (i = 0; i < 5; i++) {
		tile = CCSprite::createWithSpriteFrameName(roof_1.png);
		tile->setAnchorPoint(ccp(0, 1));
		tile->setPosition(ccp(i * _tileWidth, 0));
		tile->setVisible(false);
		this->addChild(tile, kMiddleground, kRoofTile);
		_roofTiles->addObject(tile);

		for (int j = 0; j < 4; j++) {
			tile = CCSprite::createWithSpriteFrameName(building_1.png);
			tile->setAnchorPoint(ccp(0, 1));
			tile->setPosition(ccp(i * _tileWidth, -1 * (_tileHeight * 0.47f + j * _tileHeight)));
			tile->setVisible(false);
			this->addChild(tile, kBackground, kWallTile);
			_wallTiles->addObject(tile);
		}
	}
	
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1