cocos2d-x 3.2 之 别踩白块(第一篇)
***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************
前言: 快过年了,事也不少,只能找一些简单的忙活下啦, 这游戏不知道还有没有人记得= =。
开发环境 —— VS2012 + cocos2d-x 3.2 正文: 闲话不多说,现在开始做我们的 别踩白块。 与之前的相比,这次的游戏会简单许多, 首先新建一个项目,然后修改它的 AppDelegate.cpp ,将显示尺寸设置一下。 后面在生成APK前,还要在android那设置,永远竖屏的属性。
本篇大纲 > Block类的创建 > 开始行 与 结束行 的创建 > 黑白块的创建
1.正式的第一步 就是这个游戏中比较重要的类出场了,块——Block 这个游戏里面的 Block 有很多,黑色的、白色的、黄色的等等, 统统封装在一个类里,就是——Block
建立这个类,并给它设定一个初始化函数,函数的传参要有 —— 颜色 —— 大小 —— 块内内容 —— 内容字体大小 —— 内容字体颜色 在cpp 里实现它 // Block.cpp bool Block::init( Color3B color,Size size,std::string label,float fontSize,Color4B textColor ) { // 先执行Sprite的初始化 if( !Sprite::init() ) { return false; } //设置Block的内容大小 setContentSize(size); //左下角对齐 setAnchorPoint(Point::ZERO); //文字显示位置 setTextureRect(Rect(0,size.width,size.height)); //颜色 setColor(color); //添加一个文本 auto l = Label::create(); l->setString(label); l->setSystemFontSize(fontSize); l->setTextColor(textColor); //添加到当前场景中 addChild(l); l->setPosition(size.width/2,size.height/2); return true; } 然后在Block类中,还要有一个 静态的创建函数 createBlock 、 一个 移除函数 removeBlcok 和 一个Vector用来放 block 下面是实现: // Block.cpp // 初始化Vector Vector<Block*> * Block::blocks = new Vector<Block*>(); Block* Block::createBlock( Color3B color,Color4B textColor ) { auto block = new Block(); block -> init(color,size,label,fontSize,textColor); block -> autorelease(); blocks -> pushBack(block); return block; } void Block::removeBlock() { removeFromParent(); blocks->eraSEObject(this); }
2.开始行 与 结束行 的添加 开始行,就是游戏开始前 最下面那条黄色的东东 这里就不建立场景了,直接在HelloWorldScene中修改原有函数就行, 先把没用的该删除删除, 开始行的添加,我们通过一个函数实现—— addStartLine // HelloWorldScene.cpp void HelloWorld::addStartLine() { //添加一个方块 auto block = Block::createBlock(Color3B::YELLOW,Size(visibleSize.width,visibleSize.height/4),"",20,Color4B::BLACK); addChild(block); } 在场景的 init函数中,调用这个 函数,然后运行一下,就可以看到开始行已经搞定啦~
开始行添加完了,结束行就更简单了, 结束行就是 游戏结束的时候 ,整个界面都是绿色的, 同样方法—— 一个函数:addEndLine // HelloWorldScene.cpp // 添加结束行 void HelloWorld::addEndLine() { auto block = Block::createBlock(Color3B::GREEN,visibleSize,"Game Over",32,Color4B::BLACK); addChild(block); } 可以将 场景init函数中 addStartLine改成addEndLine,看一下效果,这里就不演示啦。
3.添加黑白块 这个和 添加 开始行、结束行差不多,但是比那个稍微麻烦了点。 首先,在Block类中添加一个变量 lineIndex,再添加与它相关的get和set函数 这个变量用处是 来知道该块放在哪一行, 比如开始行就应该放在第0行(在addStartLine相应位置修改一下) 结束行就该放在 第4行(同上,也在相应位置修改)
然后就是添加黑白块的函数了 // HelloWorldScene.cpp // 添加黑白块 void HelloWorld::addNormalLine( int lineIndex ) { Block* block; //rand()是伪随机数 int blackIndex = rand()%4; for (int i = 0; i < 4; i++) { block=Block::createBlock(blackIndex==i?Color3B::BLACK:Color3B::WHITE,Size(visibleSize.width/4-2,visibleSize.height/4-2),Color4B::BLACK); addChild(block); block->setPosition(i*visibleSize.width/4,lineIndex*visibleSize.height/4); block->setLineIndex(lineIndex); } } 要知道,整个界面被分成四行(0、1、2、3) 和 四列, 这里随机数随机生成 0~3 ,每行中只有一个会和 i 相同,这个就是黑色块,其余的就是白色块, 在 > blackIndex==i?Color3B::BLACK:Color3B::WHITE < 可知一二。
在场景的init函数中不再直接调用addstartLine,而是设置一个 startGame函数,调用它 // HelloWorldScene.cpp void HelloWorld::startGame() { addStartLine(); addNormalLine(1); addNormalLine(2); addNormalLine(3); } 然后,运行一下看看
OK,基本工作搞定,下一篇,将会继续讲述 别踩白块的逻辑部分。
本篇源码 > 这里 <
****************************************** (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |