您的位置:首页 > 其它

【2048强势来袭】第二期:创建卡片类

2014-04-15 15:57 239 查看
手游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头文件。

这样,我们就成功创建了卡片类。

最后要特别感谢一下帅印。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: