手游2048中,移动的其实是卡片,下面我们就来创建一个卡片类。
1. 新建头文件CardSprite.h,代码如下:
#ifndef __CARDSPRITE_SCENE_H__
#define __CARDSPRITE_SCENE_H__
#include "cocos2d.h"
class CardSprite : public cocos2d::Sprite
{
public:
//初始化的数值,宽度,高度,卡片X轴,卡片Y轴
static CardSprite* createCardSprite(int numbers,int width,int height,float CardSpriteX,float CardSpriteY);
virtual bool init();
CREATE_FUNC(CardSprite);
//获取数字
int getNumber();
//设置数字
void setNumber(int num);
private:
//显示在界面中的数字
int number;
void enemyInit(int numbers,int width,int height,float CardSpriteX,float CardSpriteY);
//定义显示数字的控件
cocos2d::LabelTTF* labelTTFCardNumber;
//显示背景
cocos2d::LayerColor* layerColorBG;
};
#endif // __CARDSPRITE_SCENE_H__
代码已经注释得很详细了,就不再具体解释了。
2. 新建CardSprite.cpp文件
(1)createCardSprite()函数的实现基本是模板,代码如下:
CardSprite* CardSprite::createCardSprite(int numbers,int width,int height,float CardSpriteX,float CardSpriteY)
{
CardSprite* enemy = new CardSprite();
if(enemy && enemy->init())
{
enemy->autorelease();
enemy->enemyInit(numbers, width, height, CardSpriteX, CardSpriteY);
return enemy;
}
CC_SAFE_DELETE(enemy);
return NULL;
}
(2)init()函数的具体实现如下:
bool CardSprite::init()
{
if(!Sprite::init())
{
return false;
}
return true;
}
(3)下面我们来看一下enemyInit()函数的具体实现:
void CardSprite::enemyInit(int numbers,int width,int height,float CardSpriteX,float CardSpriteY)
{
//设置初始化值
number = numbers;
//加入游戏的背景颜色
layerColorBG = cocos2d::LayerColor::create(cocos2d::Color4B(200,190,180,255),width-15,height-15);
layerColorBG->setPosition(Point(CardSpriteX,CardSpriteY));
//判断如果大于0就显示,否则显示空
if(number > 0)
{
//加入中间字体
labelTTFCardNumber = LabelTTF::create(String::createWithFormat("%i",number)->getCString(),"HiraKakuProN-W6",100);
labelTTFCardNumber->setPosition(Point(layerColorBG->getContentSize().width/2,layerColorBG->getContentSize().height/2));
labelTTFCardNumber->setTag(8);
layerColorBG->addChild(labelTTFCardNumber);
}
else
{
//加入中间字体
labelTTFCardNumber = LabelTTF::create("","HiraKakuProN-W6",100);
labelTTFCardNumber->setPosition(Point(layerColorBG->getContentSize().width/2,layerColorBG->getContentSize().height/2));
labelTTFCardNumber->setTag(8);
layerColorBG->addChild(labelTTFCardNumber);
}
this->addChild(layerColorBG);
}
(4)setNumber()和getNumber()函数如下:
//获取数字
int CardSprite::getNumber()
{
return number;
}
//设置数字
void CardSprite::setNumber(int num)
{
number = num;
if(number > 0)
{
//获取数字重新更新数字
labelTTFCardNumber->setString(String::createWithFormat("%i",number)->getCString());
}
else
{
labelTTFCardNumber->setString("");
}
}
别忘了在cpp文件中引入CardSprite.h头文件。
这样,我们就成功创建了卡片类。
最后要特别感谢一下帅印。