小菜我这两天做了个小游戏当做锻炼了下自己,现在拿出来跟大家分享啦!
此集是实现画背景,以及画俄罗斯方块图像的主要代码,到后面会给出源码。
首先我在背景类RussiaGame在draw函数写 ,如下(及可画出我所要的背景)十二个格子
void RussiaGame::draw()
{
::glLineWidth(1);//设定画线的宽度
for(int i=0;i<maxline+1;i++)
{
::ccDrawLine(ccp(0,i*32),ccp(384,i*32));//绘制13条横线
::ccDrawLine(ccp(i*32,0),ccp(i*32,384));//绘制13条竖线
}
CCLayer::draw();
}
创建了一个砖块Block类
及可以在col中存入格子所在的列,row中存入格子所在的行
#include "cocos2d.h"
class Block : public cocos2d::CCObject
{
public:
int col;
int row;
bool change;
};
再次创建一个管理砖块类BlockManager,我把各个图像基本画了一遍,我写了这样一个函数来表示一个图像(就弄了七个图像);
private:
cocos2d::CCArray *_newBlock;
enum Picture{
picture1=0,
picture2=1,
picture3=2,
picture4=3,
picture5=4,
picture6=5,
picture7=6
};
定义了这样一个函数 再返回一个CCArray;
//以一个pictrue去产生一个图像数组
cocos2d::CCArray * BlockManager::type(Picture picture )
{
Block *block1=new Block;
Block *block2=new Block;
Block *block3=new Block;
Block *block4=new Block;
Block *block5=new Block;
CCArray *array=new CCArray;
switch(picture){
case picture1:
block1->row=12;
block1->col=6;
block2->row=13;
block2->col=6;
block3->row=13;
block3->col=5;
block4->row=13;
block4->col=7;
block1->change=true;
block2->change=true;
block3->change=true;
block4->change=true;
array->addObject(block1);
array->addObject(block2);
array->addObject(block3);
array->addObject(block4);
break;
case picture2:
block1->row=12;
block1->col=6;
block2->row=12;
block2->col=7;
block3->row=12;
block3->col=8;
block4->row=13;
block4->col=8;
block5->row=14;
block5->col=8;
block1->change=true;
block2->change=true;
block3->change=true;
block4->change=true;
block5->change=true;
array->addObject(block1);
array->addObject(block2);
array->addObject(block3);
array->addObject(block4);
array->addObject(block5);
break;
case picture3:
block1->row=12;
block1->col=3;
block2->row=12;
block2->col=4;
block3->row=12;
block3->col=5;
block4->row=12;
block4->col=6;
block5->row=12;
block5->col=7;
block1->change=true;
block2->change=true;
block3->change=true;
block4->change=true;
block5->change=true;
array->addObject(block1);
array->addObject(block2);
array->addObject(block3);
array->addObject(block4);
array->addObject(block5);
break;
case picture4:
block1->row=12;
block1->col=6;
block2->row=12;
block2->col=7;
block3->row=12;
block3->col=8;
block4->row=13;
block4->col=6;
block5->row=14;
block5->col=6;
block1->change=true;
block2->change=true;
block3->change=true;
block4->change=true;
block5->change=true;
array->addObject(block1);
array->addObject(block2);
array->addObject(block3);
array->addObject(block4);
array->addObject(block5);
break;
case picture5:
block1->row=12;
block1->col=6;
block2->row=13;
block2->col=6;
block3->row=13;
block3->col=5;
block4->row=14;
block4->col=5;
block1->change=true;
block2->change=true;
block3->change=true;
block4->change=true;
array->addObject(block1);
array->addObject(block2);
array->addObject(block3);
array->addObject(block4);
break;
case picture6:
block1->row=12;
block1->col=6;
block2->row=13;
block2->col=6;
block3->row=13;
block3->col=7;
block4->row=14;
block4->col=7;
block1->change=true;
block2->change=true;
block3->change=true;
block4->change=true;
array->addObject(block1);
array->addObject(block2);
array->addObject(block3);
array->addObject(block4);
break;
case picture7:
block1->row=12;
block1->col=6;
block2->row=12;
block2->col=7;
block3->row=13;
block3->col=7;
block4->row=13;
block4->col=6;
block1->change=true;
block2->change=true;
block3->change=true;
block4->change=true;
array->addObject(block1);
array->addObject(block2);
array->addObject(block3);
array->addObject(block4);
break;
}
block1->release();
block2->release();
block3->release();
block4->release();
block5->release();
return array;
}
调用这些函数就保存起来 把CCArray付给_newBlock,再在写一个draw如下函数,就可以实现把图像画在格子的上面了。
void BlockManager::draw()
{
for (int i=0;i<_newBlock->count()-1;i++)
{
Block *block=(Block *)_newBlock->objectAtIndex(i);
::ccDrawSolidRect(ccp(block->col*32+1,block->row*32+1),
ccp(block->col*32+32,block->row*32+32),ccc4FFromccc3B(ccc3(0,0,255)));
}
for (int j=0;j<_saveBlock->count();j++)
{
Block *block=(Block *)_saveBlock->objectAtIndex(j);
::ccDrawSolidRect(ccp(block->col*32+1,block->row*32+1),
ccp(block->col*32+32,block->row*32+32),ccc4FFromccc3B(ccc3(0,0,255)));
}
CCLayer::draw();
}
再将 BlockManager,在RussiaGame类中init中create就实现第一期的功能啦。