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

手游2048中,移动的其实是卡片,下面我们就来创建一个卡片类。

1. 新建头文件CardSprite.h,代码如下:

  1. #ifndef __CARDSPRITE_SCENE_H__
  2. #define __CARDSPRITE_SCENE_H__
  3. #include "cocos2d.h"
  4. class CardSprite : public cocos2d::Sprite 
  5. public: 
  6. //初始化的数值,宽度,高度,卡片X轴,卡片Y轴
  7. static CardSprite* createCardSprite(int numbers,int width,int height,float CardSpriteX,float CardSpriteY); 
  8. virtual bool init(); 
  9.     CREATE_FUNC(CardSprite); 
  10. //获取数字
  11. int getNumber(); 
  12. //设置数字
  13. void setNumber(int num); 
  14. private: 
  15. //显示在界面中的数字
  16. int number; 
  17. void enemyInit(int numbers,int width,int height,float CardSpriteX,float CardSpriteY); 
  18. //定义显示数字的控件
  19.     cocos2d::LabelTTF* labelTTFCardNumber; 
  20. //显示背景
  21.     cocos2d::LayerColor* layerColorBG; 
  22. }; 
  23. #endif // __CARDSPRITE_SCENE_H__

代码已经注释得很详细了,就不再具体解释了。

2. 新建CardSprite.cpp文件

(1)createCardSprite()函数的实现基本是模板,代码如下:

  1. CardSprite* CardSprite::createCardSprite(int numbers,int width,int height,float CardSpriteX,float CardSpriteY) 
  2.     CardSprite* enemy = new CardSprite(); 
  3. if(enemy && enemy->init()) 
  4.     { 
  5.         enemy->autorelease(); 
  6.         enemy->enemyInit(numbers, width, height, CardSpriteX, CardSpriteY); 
  7. return enemy; 
  8.     } 
  9.     CC_SAFE_DELETE(enemy); 
  10. return NULL; 

(2)init()函数的具体实现如下:

  1. bool CardSprite::init() 
  2. if(!Sprite::init()) 
  3.     { 
  4. return false; 
  5.     } 
  6. return true; 

(3)下面我们来看一下enemyInit()函数的具体实现:

  1. void CardSprite::enemyInit(int numbers,int width,int height,float CardSpriteX,float CardSpriteY) 
  2. //设置初始化值
  3.     number = numbers; 
  4. //加入游戏的背景颜色
  5.     layerColorBG = cocos2d::LayerColor::create(cocos2d::Color4B(200,190,180,255),width-15,height-15); 
  6.     layerColorBG->setPosition(Point(CardSpriteX,CardSpriteY)); 
  7. //判断如果大于0就显示,否则显示空
  8. if(number > 0) 
  9.     { 
  10. //加入中间字体
  11.         labelTTFCardNumber = LabelTTF::create(String::createWithFormat("%i",number)->getCString(),"HiraKakuProN-W6",100); 
  12.         labelTTFCardNumber->setPosition(Point(layerColorBG->getContentSize().width/2,layerColorBG->getContentSize().height/2)); 
  13.         labelTTFCardNumber->setTag(8); 
  14.         layerColorBG->addChild(labelTTFCardNumber); 
  15.     } 
  16. else
  17.     { 
  18. //加入中间字体
  19.         labelTTFCardNumber = LabelTTF::create("","HiraKakuProN-W6",100); 
  20.         labelTTFCardNumber->setPosition(Point(layerColorBG->getContentSize().width/2,layerColorBG->getContentSize().height/2)); 
  21.         labelTTFCardNumber->setTag(8); 
  22.         layerColorBG->addChild(labelTTFCardNumber); 
  23.     } 
  24. this->addChild(layerColorBG); 

(4)setNumber()和getNumber()函数如下:

  1. //获取数字
  2. int CardSprite::getNumber() 
  3. return number; 
  4. //设置数字
  5. void CardSprite::setNumber(int num) 
  6.     number = num; 
  7. if(number > 0) 
  8.     { 
  9. //获取数字重新更新数字
  10.         labelTTFCardNumber->setString(String::createWithFormat("%i",number)->getCString()); 
  11.     } 
  12. else
  13.     { 
  14.         labelTTFCardNumber->setString(""); 
  15.     } 

别忘了在cpp文件中引入CardSprite.h头文件。

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

最后要特别感谢一下帅印。

原文地址:http://blog.csdn.net/legendof1991/article/details/23764195

共有 0 条评论

Top