1.效果图:

玩法:

一个不断下降的小人,点击屏幕的left或者right控制小人的移动方向,尽可能生存久些.为什么要搞这个游戏呢?因为在2012年的8月份,我完成它的android版本,见《自己写的第一个android 游戏“是男人就下100层”》。没有从事游戏开发工作,编程进步真是慢,不过还是有点进步。这次在学习cocos2d-x,就改编了下。文章篇幅有限,不能什么都讲,讲下之前几篇文章没提到的东西。

2.cocos2d-x中的音效播放

看过前几篇文章的读者知道,我似乎都没提到音效这个问题,这次我们来看下这个问题。cocos2d-x使用了SimpleAudioEngine作为跨平台的播放音效解决方案。从名字中就可以发现非常的simple。

2.1用之前先preload下,据说会占用内存。

SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(“background.mp3”); SimpleAudioEngine::sharedEngine()->preloadEffect(“buffle.wav”);

不同平台支持的音乐格式不一样,比较麻烦,像android支持ogg,win 32就不支持了。这里我用了windows下的强大的"格式工厂"软件,各种音乐格式转换都有。

2.2播放背景音乐或音效

SimpleAudioEngine::sharedEngine()->playBackgroundMusic(“background.mp3”,true);// true means loop
SimpleAudioEngine::sharedEngine()->playEffect(“buffle.wav”);

2.3销毁音乐

SimpleAudioEngine::end();

其他关于音效的具体地可以看下官方例子 “CocosDenshionTest”。

3.游戏存储 CCUserDefault的使用

我们知道游戏一般会记录最高分啊,游戏进度,还有用户配置啊等信息。一般可以以XML或者数据库的形式来保存,更高级点的要保存在服务器端,方便跨平台同步进度。我们这个游戏太简单了,我只有保存了最高分和用户是否开启音效这两个东西。用XML的形式保存的。用到了CCUserDefault。

可以参考官方的“UserDefaultTest”例子。

下面是本游戏中的使用,先得到最高分,如果当前分数比之前最高分要高就保存下来。非常的简单。

int highScore = CCUserDefault::sharedUserDefault()->getIntegerForKey(HighScoreKey);
if(getFloorCount() > highScore){
CCUserDefault::sharedUserDefault()->setIntegerForKey(HighScoreKey,getFloorCount());
}

4.扯扯游戏中的一些实现方式

从2,3得知,一些简单的东西,游戏框架都会提供很方便的解决方案,我们主要要关注游戏的具体实现。

4.1人物下降,左右移动

http://www.waitingfy.com/archives/867

因为没有用物理引擎,所以照旧用了一个vector(向量)。这样人物就会下降了。点击左右方向会改变vector的x值。

4.2 板子向上移动

简单地在每一帧中改变板子y的位置。

4.3板子的初始化

这可能是本游戏最要关注的地方,因为就6种板子,而且宽度高度都一样,只是贴图不一样,这里就用了一个board类,没有搞继承。用了enum来表示不同类型。

typedef enum{
kNormalBoard, //0
kRollingBoard, //1
kRotateLeftBoard, //2
kRotateRightBoard, //3
kStarBoard, //4
kSpringBoard //5
}BoardType;

主要麻烦的是游戏的难度控制,肯定是要随机出板子的,我这里还是用了给定数组,然后洗牌的方式:

int level1[] = {0,0,0,0,0,0,0,1,1,1,1};
int level2[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,3,3};
int level3[] = {0,0,0,0,0,0,0,0,0,0,0,0,5,5,1,1,1,2,2,3,3};
int level4[] = {0,0,0,0,0,0,0,0,0,0,0,5,5,5,1,1,1,2,2,3,3};
int level5[] = {0,0,0,0,0,0,0,0,0,4,4,5,5,5,1,1,1,2,2,3,3};
int level6[] = {0,0,0,0,0,0,0,0,4,4,4,5,5,5,1,1,1,2,2,3,3};
int level7[] = {0,0,0,0,0,0,0,4,4,4,4,5,5,5,1,1,1,2,2,3,3};
int level8[] = {0,0,0,0,0,0,4,4,4,4,5,5,5,5,1,1,1,2,2,3,3};
int level9[] = {0,0,0,0,0,4,4,4,4,4,5,5,5,1,1,1,1,2,2,3,3};
int level10[] = {0,0,0,0,4,4,4,4,5,5,5,5,1,1,1,1,2,2,3,3};

搞了10关,数字就是板子的类型。

板子的无限生成机制:

开始会生成20个放到数组中CCArray,然后板子升到一定的高度就会remove掉,当板子的数量小于10的时候就会重新根据当前级别生成10个板子。

4.4人物与板子的碰撞检测

人物定了几个状态用enum,有些都没用到了。

typedef enum{
kBobJump,
kBobFall,
kBobHitTop,
kBobSuperMan,
kBobOnBoard,
kBobOnStarBoard,
kBobDie,
kBobOnRightRotateBoard,
kBobOnLeftRotateBoard,
kBobOnRollingBoard,
kBobOnSpringBoard,
kBobColliteWithNothing
} BobState;

碰撞还是非常的简单,矩形与矩形的碰撞。碰撞后,改变人物的状态。在每一帧中根据状态做不同的事情。

5.未来这个游戏可以改进的地方

可以用box2d来改写,普通的还是有问题,弹簧总是现实不好。

还只是win32的实现,看下弄到android中,改用设备的sensor来控制人物移动。

之前大量的玩了doodlejump,发现还是向上比较好玩,向下其实蛮无趣的。

6.游戏源码下载

开发工具vs2010,解压工具7z,cocos2d-x版本 2.2.1

http://www.waitingfy.com/?attachment_id=871(本地下载)

https://github.com/waitingfy/FallMan

第一次用了github,在一个差公司待久了真的技术进步很慢,总算用了下非常流行的github,这样就可以持续地升级项目,欢迎关注,而不是一个zip了。当然还是会提供压缩文件的下载。

7.游戏动态gif

cocos2d-x 是男人就下100层 附源码相关推荐

  1. 是男人就下100层【第五层】——2048游戏从源代码到公布市场

    上一篇<是男人就下100层[第五层]--换肤版2048游戏>中阳光小强对2048游戏用自己的方式进行了实现,并分享了核心源码,这一篇阳光小强打算将该项目的全部源码公开并结合这个实例在这篇文 ...

  2. 是男人就下100层【第四层】——Crazy贪吃蛇(2)

    在上一篇<是男人就下100层[第四层]--Crazy贪吃蛇(1)>中我们让贪吃蛇移动了起来,接下来我们来实现让贪吃蛇能够绕着手机屏幕边线移动而且能够改变方向 一.加入状态并改动代码 首先我 ...

  3. 是男人就下100层【第一层】——高仿微信界面(4)

    上一篇<是男人就下100层[第一层]--高仿微信界面(3)>中我们完成了登录,这一篇看完成登录后的一个短暂加载和引导界面. 加载界面: <RelativeLayout xmlns:a ...

  4. 《是男人就下100层》真的有隐藏剧情!B站up主数月破解,原作者点赞致谢

    边策 杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI <是男人就下100层>,曾经风靡一代的flash小游戏.炙手可热的休闲游戏之最. 它让多少人没日没夜地想去尝试" ...

  5. Unity经典游戏教程之:是男人就下100层

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  6. 是男人就下100层【第五层】——2048游戏从源码到发布市场

    上一篇<是男人就下100层[第五层]--换肤版2048游戏>中阳光小强对2048游戏用自己的方式进行了实现,并分享了核心源码,这一篇阳光小强打算将该项目的所有源代码公开并结合这个实例在这篇 ...

  7. OpenGL2D小游戏——是男人就下100层

    2019独角兽企业重金招聘Python工程师标准>>> 是男人就下100层想必大家一定都玩过,在这里给大家简单介绍一下游戏规则. 游戏规则: 游戏人物从屏幕上方按一定速率下落,同时台 ...

  8. 是男人就下100层【第一层】——高仿微信界面(8)

    上一篇<是男人就下100层[第一层]--高仿微信界面(7)>中我们实现了下弹式菜单,这一篇我们来看看如何实现微信中的摇一摇功能. 首先我们来布局我们的摇一摇界面 布局文件如下: <? ...

  9. 是男人就下100层【第一层】——高仿微信界面(5)

    前面< 是男人就下100层[第一层]--高仿微信界面(4)>中我们已经完成了基本的引导界面和登录界面,这一篇中我们来看看登录后的主界面的布局和内容,来一步一步的完成该界面. 我们先来看看主 ...

最新文章

  1. Python 判断本地python 本地版本2x or 3x
  2. 2048c语言程序,C语言实现2048小游戏
  3. TypeScript Type Innference(类型推断)
  4. 数字编码电位器c语言,数字电位器——x9c104
  5. 施一公的另一位女弟子:4年8篇CNS论文,入选“未来女科学家”,未来有望比肩颜宁...
  6. Mastering Unity 2D Game Development
  7. 我的第一本算法书(图解算法)——什么是哈希表
  8. 最大连续区间和的算法总结(转)
  9. ## CSP 201409-1相邻数对(C语言)(100分)
  10. python 线性回归 约束_python – Tensorflow:具有非负约束的线性回归
  11. matlab plv,脑电脑网络分析代码使用流程介绍
  12. 智慧公厕管理系统不断提升公厕管理水平
  13. windows默认看图工具不见了
  14. run.gps+trainer+uv+for+android,在Android 2.1(三星spica i5700)蓝牙问题,配对工程,但连接不工作...
  15. “满五唯一”和“满二唯一”是什么?有什么不同?
  16. 数据分析专题报告范文6篇_【2018最新】数据分析报告范文-优秀word范文 (5页)
  17. SpringMVC之405错误码
  18. 使用模板消息及利用模板消息群发的说明
  19. 【跨域】Access-Control-Allow-Origin 简单介绍
  20. VS2010+DDK配置

热门文章

  1. Scala 语言学习之泛型(7)
  2. td和div超出部分隐藏的区别和用法
  3. 如何执行静默(无人参与)Java 安装?
  4. Windows 平台下Myeclipse 10 中SVN 插件使用教程(TortoiseSVN)
  5. 数据库:mongodb与关系型数据库相比的优缺点zz (转)
  6. Tokyo Tyrant优势
  7. 关于CMS的那点事 I
  8. vue-cli的项目文件说明
  9. 关于lidroid xUtils 开源项目
  10. 使用 luajit的ffi 调用libcurl