【cocos2d-x IOS游戏开发-城市跑酷6】添加街区元素:墙、屋顶、烟囱
来源:互联网 发布:软件开发项目解决方案 编辑:程序博客网 时间:2024/05/06 07:52
尊重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/17201321
<捕鱼达人>回顾
【cocos2d-x IOS游戏开发-捕鱼达人1】内容介绍
上节回顾
【cocos2d-x IOS游戏开发-城市跑酷5】导演说:动起来,动起来!
快速移动的城里似乎少了点什么,对,是房子。
房子的组成呢:墙、屋顶、烟囱。
enum {kWallTile,//墙kRoofTile,//屋顶kChimney //烟囱};
在定义类型的时候,经常需要定义一些getter setter,有cocos2d从objc带来的CC_PROPERTY 和 CC_SYNTHESIZE。
CC_SYNTHESIZE(int, _type, Type);//声明一个成员变量_puffing以及getfunName函数,没有set函数。getfunName函数的实现要自己做CC_SYNTHESIZE_READONLY(bool, _puffing, Puffing);//声明成员变量数组:烟囱CC_SYNTHESIZE(CCArray *, _chimneys, Chimneys);
但是需要注意的是
1.CC_PROPERTY更适用于快速声明一个值属性,而CC_SYNTHESIZE更适用于声明一个对象。因为CC_SYNTHESIZE提供的默认set没有任何合法性检查对于值属性来说太不实用。
2.这些方法的声明全部都是virtual的,即便是内联,声明为virtual的方法也不会产生内联函数,所以不管是CC_PROPERTY还是CC_SYNTHESIZE,他们的效率都是不高的。
3.CC_PROPERTY的get方法都没有对函数体声明const修饰符,这意味着对const对象,并不能调用CC_PROPERTY声明的get方法
4.在CC_SYNTHESIZE方法之后直接声明函数或者变量都会变成public:……注意,嗯。
注意对应的释放资源:
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);}
创建街区:
Block * Block::create () {Block * block = new Block();if (block && block->initWithSpriteFrameName("blank.png")) {block->autorelease(); block->initBlock();return block;}
//安全释放CC_SAFE_DELETE(block);return NULL;}
//初始化街区配置信息void Block::initBlock(){_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);} } _chimneys = CCArray::createWithCapacity(5); _chimneys->retain(); CCSprite * chimney; CCSprite * puff; for (i = 0; i < 5; i++) { chimney = CCSprite::createWithSpriteFrameName("chimney.png"); chimney->setVisible(false); this->addChild(chimney, kForeground, kChimney); _chimneys->addObject(chimney); for (int j = 0; j < TOTAL_PUFFS; j++) { puff = CCSprite::createWithSpriteFrameName("puff_1.png"); puff->setAnchorPoint(ccp(0,-0.5)); puff->setVisible(false); chimney->addChild(puff, -1, j); } }
}
设置街区
//设置一块一块街区:入参:宽、高、类型void Block::setupBlock (int width, int height, int type) {this->setPuffing(false);_type = type;_width = width * _tileWidth;_height = height * _tileHeight + _tileHeight * 0.49f;this->setPositionY(_height);//这是墙CCSpriteFrame * wallFrame;//随机生成屋顶1或者屋顶2CCSpriteFrame * roofFrame = rand() % 10 > 6 ? _roof1 : _roof2;int num_chimneys;float chimneyX[] = {0,0,0,0,0};switch (type) {//这是一个坑(看不见)case kBlockGap:this->setVisible(false);return;//街区1case kBlock1:wallFrame = _tile1;chimneyX[0] = 0.2f;chimneyX[1] = 0.8f;num_chimneys = 2;break;case kBlock2:wallFrame = _tile2;chimneyX[0] = 0.2f;chimneyX[1] = 0.8f;chimneyX[2] = 0.5f;num_chimneys = 3;break;case kBlock3:wallFrame = _tile3;chimneyX[0] = 0.2f;chimneyX[1] = 0.8f;chimneyX[2] = 0.5f;num_chimneys = 3;break;case kBlock4:wallFrame = _tile4;chimneyX[0] = 0.2f;chimneyX[1] = 0.5f;num_chimneys = 2;break;}int i;GameSprite * chimney;int count;count = _chimneys->count();for (i = 0; i < count; i++) {chimney = (GameSprite *) _chimneys->objectAtIndex(i);if (i < num_chimneys) {chimney->setPosition( ccp (chimneyX[i] * _width, 0) );chimney->setVisible(true);} else {chimney->setVisible(false);}}this->setVisible(true);CCSprite * tile;count = _roofTiles->count();for (i = 0; i < count; i++) {tile = (CCSprite *) _roofTiles->objectAtIndex(i);if (tile->getPositionX() < _width) {tile->setVisible(true);//显示相应的屋顶tile->setDisplayFrame(roofFrame);} else {tile->setVisible(false);}}count = _wallTiles->count();for (i = 0; i < count; i++) {tile = (CCSprite *) _wallTiles->objectAtIndex(i);if (tile->getPositionX() < _width && tile->getPositionY() > -_height) {tile->setVisible(true);tile->setDisplayFrame(wallFrame);} else {tile->setVisible(false);}}}
下一节:设计烟囱
- 【cocos2d-x IOS游戏开发-城市跑酷6】添加街区元素:墙、屋顶、烟囱
- 【cocos2d-x IOS游戏开发-城市跑酷7】设计烟囱与烟的效果
- 【cocos2d-x IOS游戏开发-城市跑酷8】实现街区房子的摆放
- 【cocos2d-x IOS游戏开发-城市跑酷10】完善繁荣的城市街区及地形图类
- 【cocos2d-x IOS游戏开发-城市跑酷1】跑酷游戏介绍
- 【cocos2d-x IOS游戏开发-城市跑酷9】没有各种坑还叫游戏吗
- 【cocos2d-x IOS游戏开发-城市跑酷13】游戏玩法:友情提示:how to play?
- 【cocos2d-x IOS游戏开发-城市跑酷19】游戏效果图及资源引用页
- 【cocos2d-x IOS游戏开发-城市跑酷3】读取资源,设置背景层
- 【cocos2d-x IOS游戏开发-城市跑酷2】python create_project
- 【cocos2d-x IOS游戏开发-城市跑酷4】设置“道具”:云、路灯、竞技团队
- 【cocos2d-x IOS游戏开发-城市跑酷5】导演说:动起来,动起来!
- 【cocos2d-x IOS游戏开发-城市跑酷11】设置菜单层及新的开始
- 【cocos2d-x IOS游戏开发-城市跑酷12】男一号上场,大家鼓掌!
- 【cocos2d-x IOS游戏开发-城市跑酷15】完善积分板【CCLabelBMFont】
- 【cocos2d-x IOS游戏开发-城市跑酷18】统计结果,主角复活Try Again!!
- 【cocos2d-x IOS游戏开发-城市跑酷14】重写触屏[Touch]事件处理机制,响应玩家操作
- 【cocos2d-x IOS游戏开发-城市跑酷16】碰撞检测:撞墙 or 从房子上掉下来
- jmeter发送soap请求进行webservice接口压力测试
- linux c 基于UDP的多人聊天程序
- myeclipse 10 安装svn的方法
- Maven依赖的聚合
- jsp静态包含与动态包含的区别
- 【cocos2d-x IOS游戏开发-城市跑酷6】添加街区元素:墙、屋顶、烟囱
- struts向页面传递多个json数据
- 用js获得 地址栏传过来的值
- 大数据,来晚了
- 第六章 - 图像变换 - 卷积(cvFilter2D)
- 封装好的正则表达式
- 矩阵(二分法)
- quicksort
- 第六章 - 图像变换 - 卷积边界(cvCopyMakeBorder)