cocos2dx游戏开发——别踩白块学习笔记(一)——Block类
一、Block类介绍
当然啦,Block类在这个游戏里就是必需品= =,因为整体都是由这个搞出来的,所以我们可以把游戏需要实现的功能都放在这里。
主要有下面这些功能(经典模式):
1、创建一个Block,以及消除一个Block,还有管理Block的方法。
2、设置和取出所在的行号。
3、向下移动的功能。
二、具体实现。
1、创建一个Block,以及消除一个Block,还有管理Block的方法。
首先,管理Block的方法,就是创建一个静态的全局的数组,创建一个就加进数组,消除一个就删除出去。
(1)创建Block的方法。
先在Block.h中声明方法:
static Block* createWithArgs(Color3B color,Size size,string label,float fontSize ,Color4B textColor); virtual bool initwithArgs(Color3B color,Size size,string label,float fontSize ,Color4B textColor);
然后呢,在Block.cpp中实现:
Block* Block::createWithArgs(Color3B color, Size size, std::string label, float fontSize, Color4B textColor) { auto block = new Block(); block->initwithArgs(color, size, label, fontSize, textColor); block->autorelease(); //加入自动回收池,由引擎来管理内存。 _blocks->pushBack(block); //加入数组 return block; }
bool Block::initwithArgs(Color3B color,Size size,string label,float fontSize,Color4B textColor) { this->Sprite::init(); //一个Block就是一个精灵 this->setContentSize(size); this->setAnchorPoint(Point::ZERO); this->setTextureRect(Rect(0, 0, size.width, size.height)); //设置纹理的大小 this->setColor(color); auto myLabel = Label::create(); //创建label,主要是开始和结束的Block需要。 myLabel->setString(label); myLabel->setSystemFontSize(fontSize); myLabel->setTextColor(textColor); this->addChild(myLabel); myLabel->setPosition(size.width/2, size.height/2); return true; }
(2)删除一个Block
void Block::removeBlock() { this->removeFromParent(); //从Layer中移除 _blocks->eraseObject(this); //从数组中移除。 }
2、设置和读取行号。
CC_SYNTHESIZE(int, _BlockCol, BlockCol);
这是引擎为我们封装好的功能,就是用于快速设置接口,功能当然就很简单,就是创建设置和读取_BlockCol的函数。
3、向下移动的功能。
void Block::moveDown() { this->_BlockCol--; //记录的行号减一 auto visibleSize = Director::getInstance()->getVisibleSize(); this->runAction(Sequence::create(MoveTo::create(0.1f, Vec2(getPositionX(), _BlockCol*visibleSize.height/4)), CallFunc::create([this]() { if(_BlockCol<0) this->removeBlock(); //移除屏幕时删除Block }), NULL)); }
Block类的简单简历就到此啦~