首页 > 代码库 > 2cocos2dx别踩白块游戏案例

2cocos2dx别踩白块游戏案例



1建立一个别踩白块的项目dtwb(Don’ttouch white block)

2修改main.cpp中的代码

3修改AppDelegate.cpp中的代码

4案例代码

Block.h

#ifndef__BLOCK_H__

#define__BLOCK_H__

#include"cocos2d.h"

USING_NS_CC;

classBlock :publicCCSprite

{

public:

   //分別表示块大小,块颜色,块中的字符串,字的大小,颜色

   staticBlock *create(CCSizesize,ccColor3Bcolor,

       CCStringstr,floatstrSize,ccColor3BstrColor);

   //create方法依赖init方法,所以这里的init参数和create

   //参数实际上相同的

   boolinit(CCSizesize,ccColor3Bcolor,

       CCStringstr,floatstrSize,ccColor3BstrColor);

 

   //CCArray用于存储block的信息

   staticCCArray * array;

   //获得块对应的Array

   staticCCArray *getBlocksArray();

 

   //相当于定义一个LineIndexgetLineIndex ,setLineIndex方法

   CC_SYNTHESIZE(int,_lineIndex,LineIndex);

 

   //向下移动并且将下面的元素清空

   voidmoveDownAndCleanUp();

};

 

#endif

Block.cpp

#include"Block.h"

#include"AppMacros.h"

 

//定义块的CCArray

CCArray *Block::array =NULL;

 

//这里的create依赖下面的init,所以create中的参数和init中的参数是一样的

Block *Block::create(CCSizesize,ccColor3Bcolor,

   CCStringstr,floatstrSize,ccColor3BstrColor)

{

   //如果array是空的,那么就创建一个新的

   if (array ==NULL)

   {

       array = CCArray::create();

       //因为array走的不是渲染数,所以要加上retain()

       array->retain();

   }

   Block *pRet =newBlock;

   if (pRet && pRet->init(size,color,str,strSize,strColor))

   {

       pRet->autorelease();

       //将这个块儿添加到array中去

       array->addObject(pRet);

   }

   else

   {

       deletepRet;

       pRet =NULL;

   }

   returnpRet;

}

 

boolBlock::init(CCSizesize,ccColor3Bcolor,

   CCStringstr,floatstrSize,ccColor3BstrColor)

{

   //注意:这里的块是一个精灵

   CCSprite::init();

 

   //设置块的大小

   setContentSize(size);

   //设置渲染的大小

   setTextureRect(CCRectMake(0, 0, size.width,size.height));

   //设置块儿的颜色

   setColor(color);

   //设置块儿的锚点

   setAnchorPoint(ccp(0, 0));

 

   //设置块儿中的文字,不在create里面赋值是因为默认的字体更好些

   CCLabelTTF *label = CCLabelTTF::create();

   //设置label的字符串

   label->setString(str.getCString());

   //设置字体的大小

   label->setFontSize(strSize);

   //设置字体的颜色

   label->setColor(strColor);

   //设置字的位置

   label->setPosition(ccp(size.width / 2, size.height / 2));

   addChild(label);

 

   returntrue;

}

 

//取出array

CCArray *Block::getBlocksArray()

{

   return array;

}

 

voidBlock::moveDownAndCleanUp()

{

   //行号减去1

   _lineIndex--;

   //往下走一个格

   CCMoveTo *to =CCMoveTo::create(0.01,

       ccp(getPositionX(),getPositionY() -winSize.height / 4));

   this->runAction(to);

   

   //从节点中拿走

   if (_lineIndex < 0)

   {

       //从数组中拿走,这里将引用计数减1,让它不影响渲染数的问题

       array->removeObject(this);

       removeFromParentAndCleanup(true);

   }

}

运行结果:

 

 

2cocos2dx别踩白块游戏案例