一、引言

如我们所看到的,每一组水管由上下两根组合而成。在结合之前我们所看到的游戏素材。我想,大概可以明白,在游戏当中,每组水管其实都是一样的,而我们看到的高低不同的各组水管,其实是通过设置水管的Y方向的坐标来实现的。

二、水管的添加

在游戏层当中,我们首先创建了两根水管:

Sprite *pipUp = Sprite::createWithSpriteFrame(AtlasLoader::getInstance()->getSpriteFrameByName("pipe_up"));
Sprite *pipDown = Sprite::createWithSpriteFrame(AtlasLoader::getInstance()->getSpriteFrameByName("pipe_down"));

于此同时,我们创建singlePip来把两根水管组合成一组:

Node *singlePip = Node::create();
singlePip->addChild(pipDown, 0, DOWN_PIP);
singlePip->addChild(pipUp, 0, UP_PIP);
singlePip->setPosition(visibleSize.width + i*PIP_INTERVAL + WAIT_DISTANCE, this->getRandomHeight());

三、水管的高度

至于水管的高度则是随机生成的:

int GameLayer::getRandomHeight() {
Size visibleSize = Director::getInstance()->getVisibleSize();
return rand()%(int)(2*PIP_HEIGHT + PIP_DISTANCE - visibleSize.height);
}

四、源源不断的水管?

在GameLayer中,我们通过一个容易来保存所创建的水管:

vector<Node *> pips;

每创建一组水管,设置其Tag值

singlePip->setTag(PIP_NEW);

并且将其放入到pips容器中

this->pips.push_back(singlePip);

在游戏进入开始状态以后,开始创建水管

this->gameStatus = GAME_STATUS_START;
this->createPips();

在移动地面的时候,同时移动所有水管

// move the pips
for (auto singlePip : this->pips) {
singlePip->setPositionX(singlePip->getPositionX() - 2);
if(singlePip->getPositionX() < -PIP_WIDTH) {
singlePip->setTag(PIP_NEW);
Size visibleSize = Director::getInstance()->getVisibleSize();
singlePip->setPositionX(visibleSize.width);
singlePip->setPositionY(this->getRandomHeight());
}
}

那么,到底有几根水管呢?
事实上,我们只设置了两根水管!如果注意观察的话,会发现,同一时刻内,只有两组水管显示在屏幕上面。而当一组水管从左侧消失的时刻设置它的X坐标和随机高度,那么此时给人一种错觉,即又有一组水管生成了= =,而实际上,它还是刚才从左侧消失的那组水管,只是高度变化了。

五、小结

本节介绍了看似源源不断的水管的实现,而有关详细代码,还请移步到github: https://github.com/OiteBoys/Earlybird

【cocos2dx-3.0beta-制作flappybird】让马里奥大叔来搬水管—在游戏层加入水管相关推荐

  1. cocos2d-x 如何制作一个类马里奥的横版平台动作游戏 1 献给所有对动作游戏有爱的朋友

    本文翻译自国外著名IOS源码教学商业网站raywenderlich 的 IOS Game Start Kits三件套之一的Platformer Game/平台动作游戏的前奏曲,另一个是Beat'Em ...

  2. cocos2d-x 如何制作一个类马里奥的横版平台动作游戏 1 献给所有对动作游戏有爱的朋友...

    本文翻译自国外著名IOS源码教学商业网站raywenderlich 的IOS Game Start Kits三件套之一的Platformer Game/平台动作游戏的前奏曲,另一个是Beat'Em u ...

  3. cocos2d-x 如何制作一个类马里奥的横版平台动作游戏续 2

         欢迎回来,上篇我们讲到了物理引擎中重力环境模拟以及主角考拉与地面墙壁的碰撞,相信大家已经对2D世界的物理模拟有了一定的了解,现在我们接着讲如何让考拉动起来吧! 让考拉动起来!     这里控 ...

  4. 关于制作FlappyBird无限地面的一些问题

    目录 存在的问题 解决问题的过程 最终效果 总结 存在的问题 在跟着老师的教程学习并制作FlappyBird无限地面这一块内容时,一开始还比较顺利,但是当查看效果时我发现了一些问题 我所用的教程是[手 ...

  5. HTML5方向键控制会奔跑的马里奥大叔

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  6. cocos2d-x 3 0 制作横版格斗游戏

    转自:http://philon.cn/post/cocos2d-x-3.0-zhi-zuo-heng-ban-ge-dou-you-xi cocos2d-x: v3.0-alpha-pre Wind ...

  7. Cocos2d-x 3.0 制作横版格斗游戏2

    转载:https://blog.csdn.net/bridge001/article/details/18882575 git:https://github.com/pj2933/fight2d co ...

  8. cocos2d-x 3.0 制作横版格斗游戏

    cocos2d-x: v3.0-alpha-pre Windows环境: Windows8 + Visual Studio 2012 Linux环境: Ubuntu12.04 + gcc 4.7.2 ...

  9. Cocos2d-x v3.6制作射箭游戏(二)

    原文 Cocos2d-x v3.6制作射箭游戏(二) 六 24, 2015by RENSHANin COCOS2D-X 上章我们创建并加载了游戏地图,接下来的两章我们将实现如下的效果. 在开始之前,先 ...

最新文章

  1. Vue教程5【vuex】getters,mapState,mapGetters,mapActions,mapMutations,模块化namespace
  2. Java总结篇系列:Java多线程(二)
  3. AI探索(二)Tensorflow环境准备
  4. Netlink实现热拔插监控
  5. python人工智能——机器学习——分类算法-朴素贝叶斯算法
  6. [C++]在Visual Studio 2010中使用Google Test - 配置
  7. 工作流实战_24_flowable 全局监听
  8. 一句话证明你是产品经理
  9. 微信公众平台开发(120) 微信支付报关接口
  10. 安装VMware Workstation 16 Pro 和 ubuntu-16.04.7-desktop-amd64.iso
  11. 桌面没有计算机图标6,我的电脑图标没了怎么办
  12. 【清北学堂2018-刷题冲刺】Contest 2
  13. 改革40年致敬创业者:有梦想谁都了不起!
  14. 人工智能在金融行业的应用
  15. 不是“饭饭之交”! 李彦宏丁磊CP乌镇神同步
  16. Golang go-huge-util 工具库介绍
  17. 搭建直播平台,你需要先知道这些
  18. stm32呼吸灯c语言程序,STM32使用PWM控制LED呼吸灯效果
  19. 【PMP】PMP考试易错点总结和答题技巧总结
  20. Java入门基础(一)——Hello World

热门文章

  1. 什么是EV 代码签名证书
  2. 智能驾驶传感器的工作原理
  3. rv1126_rv1109移植opencv with ffmpeg for rtsp
  4. 【计量统计】计量经济学导论常见公式原理及习题解答
  5. 2022.04.08_数据结构—左程云02
  6. OBS 插件推流以及日志模块
  7. 什么是对冲?对冲的作用
  8. IOS 新增字体类型
  9. bootstrap实现登录注册界面
  10. django 聚合查询 最大值与最小值 200316