小小菜之Cocos2d-x游戏开发旅程——项目实例:2048(4)
2015-10-17 16:39
495 查看
4.元素块的消除
前面已经讲了元素块的移动,那么移动完之后就需要消除,让元素块的数字翻倍,这才是游戏的玩法
既然有消除,那么一个方块肯定不能消除,所以我们更新一下产生元素块的方法,让它每移动一次产生一个新块,而且不能产生在已有块区域
ok,之后那么,首先在Tiled类中先写一个让数字翻倍的方法
然后,我们在移动时添加对消除的判断,若不能移动则判断是否能消除。
未完待续。。。
————9秒学院学习日志
前面已经讲了元素块的移动,那么移动完之后就需要消除,让元素块的数字翻倍,这才是游戏的玩法
既然有消除,那么一个方块肯定不能消除,所以我们更新一下产生元素块的方法,让它每移动一次产生一个新块,而且不能产生在已有块区域
void Game::addNewTiled() //添加新块 { srand((unsigned)time(NULL)); //判断是否还有空白区域 if (allTiled.size() == 16) { //死亡判定 return; } //获得剩下的空白区域 long temp = 16 - allTiled.size(); int num = rand()%temp; int row , col; int count = 0;//计算空白区域 int i ; for (i = 0; i < 16; i++) { row = i/4; col = i%4; if (map[row][col] == 0) { count++; if (count > num) { break; } } } row = i/4; col = i%4; auto newTiled = Tiled::createTiled(row, col); newTiled->setAnchorPoint(Vec2(0.5 , 0.5)); this->getChildByTag(TAG_LAYER_BG)->addChild(newTiled); allTiled.pushBack(newTiled); map[row][col] = allTiled.getIndex(newTiled) + 1; }
ok,之后那么,首先在Tiled类中先写一个让数字翻倍的方法
void Tiled::doubleNum() //消除数字并翻倍 { this->number = this->number * 2; auto label = (Label*)this->getChildByTag(TAG_TILED_BG)->getChildByTag(TAG_TILED_NUM); auto layer_c = this->getChildByTag(TAG_TILED_BG); label->setString(StringUtils::format("%d" , this->number)); }
然后,我们在移动时添加对消除的判断,若不能移动则判断是否能消除。
if(map[row+1][nowcol] > 0) { auto upTiled = allTiled.at(map[row+1][nowcol] - 1); auto nextTiled = allTiled.at(map[row][nowcol] - 1); if (upTiled->number == nextTiled->number && nextTiled->number != 4096) { //让上边块加倍,原来块删除 int index = map[row + 1][nowcol]; upTiled->removeFromParent(); allTiled.erase(map[row + 1][nowcol] - 1); map[row + 1][nowcol] = 0; nextTiled->doubleNum(); for (int r = 0; r < 4; r++) { for (int c = 0; c < 4; c++) { if (map[r][c] > index) { map[r][c]--; } } } } }
未完待续。。。
————9秒学院学习日志
相关文章推荐
- win平台下搭建cocos2dx 3.5 lua开发环 4000 境
- Cocostudio工具创建工程,因没有字体资源导致在vs中编译时,出现中文乱码现象
- xcode7中使用cocos2d-x3.8的webview控件
- cocos2d-x Vector的使用
- cocos2d-x游戏得分显示
- cocos2d-x Loadingbar的使用
- cocos2d-x moveTo的使用
- Cocos2d-x能够实现的效果总结
- Cocos2d-x实现用户触摸的功能
- cocos2d从零开始
- Cocos2d-x 3.2 Lua演示样本 ActionTest(操作测试)
- Cocos流体之 集成LiquidFun&&并自定义到CocosFrameWork(一)
- CocosFrameWork 自动引入cpp库以实现跳转查看源码
- Cocos Studio中声音组件(ComAudio)的获取与播放
- cocos2d-x 调色
- Cocos2d-x利用Unity轻松快速设计复杂2D地形
- cocos2d-x 3.0 final 如何在android里添加广告(AppActivity.java注释部分是原作者原创,未验证)
- Cocos2d-x 2.x android下集成admob广告(二)底部banner
- cocos2dx 利用CCOrbitCamera实现扑克牌翻牌效果
- 使用VS插件在VS2012/2013上编辑和调试Quick-cocos2d-x的Lua代码