小菜我这两天做了个小游戏当做锻炼了下自己,现在拿出来跟大家分享啦!
此集是实现画背景,以及画俄罗斯方块图像的主要代码,到后面会给出源码。
首先我在背景类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就实现第一期的功能啦。