首页 > 代码库 > 【来写个2048吧】—— 创建卡片类以及添加

【来写个2048吧】—— 创建卡片类以及添加

一、创建卡片类

首先想想卡片是一个精灵,那么我们就继承精灵类。然后还要有数字,背景颜色。基本就这些,那么看代码吧。

Card.h代码
#ifndef _CARD_H_
#define _CARD_H_

#include "cocos2d.h"

USING_NS_CC ;

class CardSprite : public Sprite
{
public :
        //这里number是卡片数字,wight和height是宽和高,cardSpriteX和CardSpriteY是卡片坐标
        static CardSprite * createCardSprite ( int number , int wight , int height, float CardSpriteX , floatCardSpriteY);
        virtual bool init();
        CREATE_FUNC (CardSprite );

        //获取数据
        int getNumber ();
        //设置数据
        void setNumber ( int num );
private :
        //显示的数字
        int number ;
        //初始化
        void enemyInit ( int number , int wight , int height, float CardSpriteX , float CardSpriteY );
        //显示数字的控件
        LabelTTF * labelCardNumber ;
        //背景
        LayerColor * colorBackground ;
};

Card.cpp代码实现
#include "Card.h"

USING_NS_CC ;

CardSprite * CardSprite :: createCardSprite( int number , int wight, int height , float CardSpriteX , float CardSpriteY)
{
        //这里是创建一个自定义精灵类,格式很规范化
        CardSprite * enemy = new CardSprite ();
        if ( enemy && enemy-> init ())
        {
               enemy ->autorelease ();
               enemy ->enemyInit ( number, wight ,height , CardSpriteX, CardSpriteY );
               return enemy ;
        }
        CC_SAFE_DELETE (enemy );

        return NULL ;
}

//这里也是规范化
bool CardSprite:: init ()
{
        if (! Sprite ::init ())
        {
               return false ;
        }

        return true ;
}

//获取数据
int CardSprite:: getNumber ()
{
        return number ;
}

//设置数据
void CardSprite:: setNumber (int num)
{
        number = num;
        //更新显示的数字
        if ( num > 0)
        {
               labelCardNumber ->setString ( __String:: createWithFormat ("%i" , number)-> getCString ());
        }
        else
        {
               labelCardNumber ->setString ( "");
        }
}

//初始化
void CardSprite:: enemyInit (int number, int wight , int height , float CardSpriteX, float CardSpriteY )
{
        //初始化数字
        this ->number = number ;
        //加入卡片背景颜色
        colorBackground = LayerColor :: create( Color4B (200 , 190, 180 ,255 ), wight- 15 ,height - 15);
        colorBackground ->setPosition ( Point( CardSpriteX ,CardSpriteY ));

        //判断如果大于0就显示,否则就不显示
        if ( number > 0)
        {
               //加入字体
               labelCardNumber = LabelTTF :: create( __String ::createWithFormat ( "%i", number )->getCString (), "Consolas", 100 );
               labelCardNumber ->setPosition ( Point( colorBackground ->getContentSize (). width/ 2 , colorBackground -> getContentSize(). height /2 ));
               labelCardNumber ->setTag ( 8);
               colorBackground ->addChild ( labelCardNumber);
        }
        else
        {
               //加入字体
               labelCardNumber = LabelTTF:: create ("" , "Consolas", 100 );
               labelCardNumber ->setPosition ( Point( colorBackground ->getContentSize (). width/ 2 , colorBackground -> getContentSize(). height /2 ));
               labelCardNumber ->setTag ( 8);
               colorBackground ->addChild ( labelCardNumber);
        }

        this ->addChild ( colorBackground);
}

基本自定义精灵类差不多就是这个套路,看注释就很明白

二、把卡片加入到场景中
首先在GameScene.h中加入
	CardSprite *cardArr[4][4]   //用来储存卡片
        //根据屏幕大小创建卡片
        void createCardSprite ( Size size );

下面是实现
//根据屏幕大小创建卡片
void GameScene:: createCardSprite (Size size)
{
        //求出单元格的宽和高
        int cardSize = ( size. height - 36) / 4 ;
        //绘制出4X4的单元格
        for ( int i = 0 ; i < 4; i++)
        {
               for ( int j = 0 ; j < 4; j++)
               {
                      //需要屏幕分辨率适配
                      CardSprite * card = CardSprite:: createCardSprite (2 , cardSize , cardSize , cardSize * i+ 80 ,cardSize *j + 20);
                      cardArr [i ][ j] = card ;
                      addChild (card );
               }
        }
}

然后将函数加入init()中即可。
同时创建游戏背景

        //加入游戏背景
        auto layerColorBG = LayerColor ::create ( Color4B( 180 , 170 , 160 , 255 ));
        this ->addChild ( layerColorBG);
        //创建4X4卡片
        createCardSprite (visibleSize );

运行可以看到