首页 > 代码库 > 【来写个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 );
运行可以看到
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。