小小菜之Cocos2d-x游戏开发旅程——项目实例:贪吃蛇(4)
2015-08-15 22:25
405 查看
——吃食物和长身体
蛇绕着食物跑啊跑,转啊转,就是吃不到,它都要崩溃了~
~(>_<)~~
好吧,我们来帮帮它吧
如何让蛇可以吃到食物呢,其实很简单嘛。既然蛇头有行列坐标,那么食物也有行列坐标。所以当蛇头的行列坐标和食物的行列坐标相等时,让食物的坐标改变,这不就是吃到了吗,对吧。
现在蛇已经可以吃到食物了,但是不能光吃不长吧,所以吃饱了应该长身体。
由于身体有很多很多很多。。。。
我们就用一个集合来保存身体先定义一个集合Vector
最后让身体也移动起来
OK,这样蛇就可以自由的吃东西长身体了。
当然,这个游戏还没有做完,还差最后一点点。
未完待续。。
————9秒学院学习日志
蛇绕着食物跑啊跑,转啊转,就是吃不到,它都要崩溃了~
~(>_<)~~
好吧,我们来帮帮它吧
如何让蛇可以吃到食物呢,其实很简单嘛。既然蛇头有行列坐标,那么食物也有行列坐标。所以当蛇头的行列坐标和食物的行列坐标相等时,让食物的坐标改变,这不就是吃到了吗,对吧。
if(head->row == food->row && head->col == food->col) { //改变食物的位置 food->col = rand()%10; food->row = rand()%10; food->setPosition(Vec2(food->col*GAME_TILED_WIDTH , food->row*GAME_TILED_HEIGHT)); }
现在蛇已经可以吃到食物了,但是不能光吃不长吧,所以吃饱了应该长身体。
由于身体有很多很多很多。。。。
我们就用一个集合来保存身体先定义一个集合Vector
//第一种,让身体的方向跟着头的方向即可 if(allBody.size() == 0) //当没有身体的时候 { nowbd->dir = head->dir; //身体的方向跟着头 switch(nowbd->dir) { case UP: nowbd->row = head->row - 1; nowbd->col = head->col; break; case DOWN: nowbd->row = head->row +1; nowbd->col = head->col; break; case LEFT: nowbd->row = head->row; nowbd->col = head->col +1; break; case RIGHT: nowbd->row = head->row; nowbd->col = head->col -1; break; default: break; } } //第二种,让新的身体的方向跟着原来的最后一截身体的方向 else //当有身体的时候 { auto lastbd = allBody.at(allBody.size() - 1); nowbd->dir = lastbd->dir; switch(nowbd->dir) { case UP: nowbd->row = lastbd->row - 1; nowbd->col = lastbd->col; break; case DOWN: nowbd->row = lastbd->row +1; nowbd->col = lastbd->col; break; case LEFT: nowbd->row = lastbd->row; nowbd->col = lastbd->col +1; break; case RIGHT: nowbd->row = lastbd->row; nowbd->col = lastbd->col -1; break; default: break; } } //添加到allBody中 allBody.pushBack(nowbd); //设置坐标 nowbd->setPosition(Vec2(nowbd->col*GAME_TILED_WIDTH, nowbd->row*GAME_TILED_HEIGHT)); //添加到节点中 this->getChildByTag(TAG_BG)->addChild(nowbd);
最后让身体也移动起来
if(allBody.size() > 0) { for(long i = allBody.size()-1 ; i >= 0; i--) { auto nowBody = allBody.at(i); switch(nowBody->dir) { case UP: nowBody->row++; break; case DOWN: nowBody->row--; break; case LEFT: nowBody->col--; break; case RIGHT: nowBody->col++; break; } nowBody->setPosition(Vec2(nowBody->col*GAME_TILED_WIDTH , nowBody->row*GAME_TILED_HEIGHT)); if(i > 0) { nowBody->dir = allBody.at(i - 1 )->dir; } else { nowBody->dir = head->dir; } } }
OK,这样蛇就可以自由的吃东西长身体了。
当然,这个游戏还没有做完,还差最后一点点。
未完待续。。
————9秒学院学习日志
相关文章推荐
- 细说Cocos2d-JS——从项目构造说起
- cocos2d-x开发日志07 —— 触摸处理
- cocos2d-x开发日志06 —— 菜单制作
- 在cocos2d-x中嵌入网页
- Cocos2dx——瓦片地图(Tiled Map)
- Cocos Studio 学习指引
- Cocos Studio常用控件的使用
- cocos2d-x开发日志05 ——Z轴坐标 和 锚点设置
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:贪吃蛇(3)
- cocos2d-x开发日志04 ——计划任务
- cocos2d-x开发日志03 ——加入文字和图片
- cocos2d-x开发日志02 ——新建场景
- 9、Cocos2dx 3.0游戏开发三查找值小工厂方法模式和对象
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:贪吃蛇(2)
- 【Cocos2d入门教程八】浅析Cocoss2d下的音频引擎及封装音频类
- Cocos2d-js制作游戏新手引导(二)
- Cocos2d-js打造游戏新手引导(一)
- Cocos2d-x过程动作CCProgressTo示例学习笔记
- Fast TileMap ---Cocos2dx
- Cocos2d-x学习笔记(十)—— 音频系统(SimpleAudioEngine)