您的位置:首页 > 移动开发 > Cocos引擎

小小菜之Cocos2d-x游戏开发旅程——项目实例:2048(2)

2015-10-16 20:48 495 查看
2.块的封装

前面已经把游戏场景中的标题、游戏区域及网格都已经创建出来了。

接下来需要对方块进行封装,便于后面的添加、删除、合并

首先创建两个文件Tiled.cpp及Tiled.h

在头文件中让Tiled继承Node,声明一个静态create函数,如下

Tiled.h

class Tiled : public Node
{
public:
CREATE_FUNC(Tiled);
bool init();
static Tiled * createTiled(int row , int col);
void moveTiled(int row , int col);  //块的移动
int r , c;  //行,列
int number;
};


然后在cpp中实现

Tiled * Tiled::createTiled(int row , int col)
{
Tiled * newTiled = Tiled::create();
newTiled->moveTiled(row ,col);

return newTiled;

}


bool Tiled::init()
{
if (!Node::init()) {
return false;
}

return true;
}


这样,一个Tiled类基本创建好了

接下来,我们要在其中将带有数字的块创建,然后添加到网格中

首先,创建背景层

//背景层
auto layer_tiled = LayerColor::create(Color4B(250 , 236 , 11 , 0), 190, 190);
layer_tiled->setTag(TAG_TILED_BG);
layer_tiled->setAnchorPoint(Vec2(0 , 0));
this->addChild(layer_tiled);


然后数字层

//数字层

int temp = rand()%10;
this->number = temp > 8 ? 4 : 2;

auto layer_number = Label::createWithBMFont("font-issue1343-hd.fnt",
StringUtils::format("%d" , number));
layer_number->setPosition(100,105);
layer_number->setOpacity(0);

layer_tiled->addChild(layer_number , 10);
layer_number->setTag(TAG_TILED_NUM);
switch (this->number) {
case 2:
layer_tiled->setColor(Color3B(250 , 236 , 11 ));
break;
case 4:
layer_tiled->setColor(Color3B(251 , 245 , 146 ));
break;
default:
break;
}


最后在写一个moveTiled函数,用来改变位置

void Tiled::moveTiled(int row , int col)  //块的移动
{
this->setPosition(col*190 , row*190);
this->r = row;
this->c = col;

}


做完这一切,回到GameScene.cpp中

先在.h文件中引入Tiled.h

创建一个Vector

int row = random(0 , 3);
int col = random(0 , 3);
auto newTiled = Tiled::createTiled(row, col);
layer_bg->addChild(newTiled);   //添加到网格
allTiled.pushBack(newTiled); //添加到集合


ok,这样就成功的在网格中创建了一个方块,位置随机。

未完待续。。。

————9秒学院学习日志
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: