1. 游戏视频

主角眼熟吗?没错,上次跑酷游戏中的“30”来Jump了,有三种道具,主角光环,竹蜻蜓,翅膀; 有两种怪物,螃蟹和鸟; 有5种板子。点击屏幕,30会把它的嘴巴3给发射出去,可以攻击怪物。上次的跑酷参考《cocos2d 简单高仿天天跑酷游戏》 ,苹果已经审核通过...但做的很差,后续有时间再更新。后面考虑会出更多的该主角游戏。

其实蛮讨厌"高仿"这两个字的,争取下一款游戏有更多原创部分。

2.向上跳的位移实现

正常情况下,不使用任何的东西,主角在板子上跳,会跳出最上面的屏幕就看不到了!没有视频中主角一直在屏幕中间的感觉。那么如何实现这样的效果呢?非常简单。
这里不得不吐槽下cocos2d, 学过Opengl 或者 DirectX的,都应该知道有Camera这么一个东西存在,2D游戏只是选择了平行投射(parallel projection)参考这篇文章《DirectX Camera》 .但3.2 之前的Camera根本不能用,3.3才加入了Camera. 如果用Camera这里会非常容易实现,也跟现实比较吻合。
1.如果使用Camera,所有板的PositionY 就定死的,越高的板,它的PositionY 就越大,主角往上跳时,主角的PositionY也不断变大。有一个Camera,它的位置跟着主角来移动就可以了。就这么简单。
2.不使用Camera,我用的是3.2的cocos2d,所以不好使用Camera,采用了移动整个Layer的实现。主角会跳出最上面的屏幕的,怎么办的?把整个Layer往下移动就可以了。
float minPositionY = 0;
void update(float dt){//follow the herofloat nextPositionY = VISIBLE_HEIGHT / 2 - hero->getPositionY();if(nextPositionY < minPositionY){minPositionY = nextPositionY;this->setPositionY(minPositionY);}
}

看起来比较简单,如果是主角掉下屏幕最底下,有一个坠落感觉,逻辑上又比较麻烦了。还是用Camera的比较好。

3.板子生成的逻辑

最块又比较麻烦了。首先是板子连续生成的逻辑,不可能一次生成几十个板子,反正屏幕之上和屏幕之下用户都是看不到的,也就是说10几个板子,整个游戏就够用了。到后面,10个都不用。正常的update是一秒中执行60次。我们需要整一个慢一点的定时器,这样不会太影响性能,schedule(schedule_selector(GameObjectsLayer::createAndRemoveObjects), 0.064);,专门在里面创建板和移除不需要的板子。
deque<JumpBoard*> _boardObjects;
void generateSomeBoards(const int& lastPositionX,int startPosition,const int& count);
void createAndRemoveObjects(float dt){if(_pause == true){return;}if(_boardObjects.size() <= 12){//generate some boards if we only have few boardsJumpBoard *lastBoard = _boardObjects.back();generateSomeBoards(lastBoard->getPositionX(), lastBoard->getPositionY() + getGeneratorHigh(),5);}//remove unused boardsJumpBoard* firstBoard = _boardObjects.front();if(hero->getPositionY() - firstBoard->getPositionY() > 600){firstBoard->removeFromParent();_boardObjects.pop_front();}}

再简单用语言来说下上面中没有给出详细代码的generateSomeBoards。

游戏要考虑的东西很多:
1.刚开始的时候两个板之间的距离要短些,看起来会密些,这样游戏会容易上手些,两个板之间的距离会随着主角的变高而增大。
2.刚开始的时候生成板的类型要简单些,我这里只有最两种类型,到后面才会出现各种类型的板。
我现在越来越意识到,如果一个游戏的主要玩法能让不懂程序逻辑的策划很容易修改的话,这个游戏写的就还不错。这里游戏的玩法就是如何控制生成板子。我必须承认这块做的还不好。
typedef enum{kNormalBoard,      //0kCloudBoard,       //1kMoveBoard,        //2kMoveLttleBoard,   //3kSpringBoard       //4
}JumpBoardType;int level1[] = {0,0,0,0,0,0,0,0,0,0,1,1,1};
int level2[] = {0,0,0,0,0,0,0,0,0,0,1,1,2,3,4};

这里简单有两个数组,后面会用它们初始化两个vector<int>,然后用random_shuffle,进行洗牌。会根据当前的hero高度来选择不同的数组。当index移到最后一个时候,就归0,再次洗牌。

int getBoardTypeDueToFloorNum(){int floorCount = getFloorCount();int result = 0;if(floorCount <= 2){if(_levelIndex >= _level1.size()){_levelIndex = 0;random_shuffle(_level1.begin(), _level1.end());}result = _level1[_levelIndex];++_levelIndex;return result;}else if(floorCount > 2  && floorCount <= 10){if(_levelIndex >= _level2.size()){_levelIndex = 0;random_shuffle(_level2.begin(), _level2.end());}result = _level2[_levelIndex];++_levelIndex;return result;}else{//无限模式}
}

当然后面的无限模式更加复杂点,我搞了5种不同类型的数组进行洗牌。这里不再赘述。

4.道具和怪物生成位置

道具和怪物生成位置我就简单处理了,每隔几个屏幕高度就放置一个。
//typedef enum{
//    kHelicopterItem,   //0
//    kFlyItem,          //1
//    kShortItem,        //2
//    kLongItem,         //3
//    kDefenceBall       //4
//}EatItemType;int allEatItemType[] = {4,4,4,0,0,1};

为了让不同道具出现概率不一样,又用了跟上面板子类似的逻辑。怪物这里就2种,就50%概率会生成不同怪物。Doodle jump这块做的变态的好,一般怪物出现之前会有杀死怪物或者躲避怪物的道具出现。

5.主角光环和抛物线掉落

主角光环的椭圆移动,可以参考这篇文章《cocos2d 绕椭圆移动
还有一个是使用过后道具的掉落轨迹。这块第一次玩Doodle jump就给我带来了惊喜,竹蜻蜓或者火箭,时间到后,完美的扔掉,处理的非常自然和有趣。
实现起来跟上面的椭圆移动类似。就是数学用的抛物线,只是这个是开口向下的。只用到了左边红色的部分。
我用的公式是x = t * -400,  y = x * x *-0.02 ( x  = [0, -400] )。update中,t = [0, 1],代入这个公式就可以了。

6. 其他

其他像道具生成的位置比较讲究,最后添加到板子中去,这样板子移动,就会跟着移动了,会自然点。
无论是主角碰上怪物或者主角的嘴巴碰上怪物,怪物都会旋转地往那个方向飞出去,这个效果非常好,可以简单地计算下两个点的角度,给怪物一个速度属性,在update的每一帧中进行移动。
主角的嘴巴飞出去还会飞回来,飞回来的时候,因为主角的位置一直变化的,所以也要在update的每一帧中,不断改变位置,离主角越来越近,像飞机的跟踪导弹。这里就不再赘述。
感觉Cocos2d-x 3.2这块重力感应Accelerometer控制的似乎有问题,在这个游戏中偶尔会失控,我还不知道发生的原因和规律,非常头痛。还有游戏的速度,看起来都是60帧,但速度偶尔会有区别。

这些高仿的游戏我想不太可能有好的市场,只能通过它们积累经验来做真正原创游戏。不过做这些小游戏比那些网络游戏有趣些。有真正游戏的感觉。

第一个是IPhone 下载地址,第二个是android的。点击跳转链接,或者扫描二维码。

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

cocos2d 高仿doodle jump 无源码相关推荐

  1. cocos2d 高仿doodle jump 无源代码

    1. 游戏视频 主角眼熟吗?没错,上次跑酷游戏中的"30"来Jump了,有三种道具.主角光环,竹蜻蜓.翅膀: 有两种怪物,螃蟹和鸟: 有5种板子.点击屏幕,30会把它的嘴巴3给发射 ...

  2. 【Android重量级】高仿大众点评源码

    高仿大众点评源码   下载地址:http://url.cn/Nzj3Lc    源码简介 声明:本源码只用于个人研究使用,不可用于商业用途,由于本源码引起的纠纷皆与作者无关. 本套源码是本人在校的时候 ...

  3. 一款非常不错的高仿UC浏览器源码下载

    今天给大家分享一款非常不错的android源码,这是我刚刚在网上找到的源码,高仿UC浏览器源码下载,希望大家能够喜欢. 源码下载: http://code.662p.com/view/1634.htm ...

  4. flappy bird java源码_android高仿flappy bird源码

    [实例简介]android高仿flappy bird源码,可以在任何机型上完美运行,难度可以自己调整,适合新手,当做一个小项目练练手. [实例截图] [核心代码] package liqiang.fl ...

  5. iOS高仿微信完整源码,网易爱玩APP源码等

    iOS精选源码 iOS一种弹出视图效果带动画 一个快速便捷.无侵入.可扩展的动画弹框库 高仿Elk - 旅行货币转换器 iOS内分享的界面.功能一体化解决方案 使用Olami sdk实现一个语音查询股 ...

  6. android+高仿+日历,项目源码--Android天气日历精致UI源码

    技术要点: 1. 天气日历精致UI 2. Android的Http通信技术 3. Android的天气信息解析 4. Android的日历信息的统计 5. Andorid的地理位置的管理 6.源码带有 ...

  7. android 高仿酷狗源码,项目源码--Android类似酷狗音乐播放器

    知识技能概要: 1.音乐文件的扫描与管理 2.音频流的解码 3. UI控件的综合使用 4.播放列表方式管理 5.随机播放方式 6.源码带详细的中文注释 ...... 详细介绍 1.音乐文件的扫描与管理 ...

  8. 高仿拼多多源码/拼单商城系统源码/拼团商城源码

    ☑️ 品牌:thinkphp ☑️ 语言:PHP ☑️ 类型:拼团商城源码 ☑️ 支持:PC+WAP

  9. 基于python高仿探迹源码

    基于python实现探迹SCRM 最近几年市面上出现了很多大数据应用的产品,前面出现天眼查.企查查.企信宝等工商信息应用的saas产品,最近工商信息的应用由查询企业 转化为查客户了,所以又出现了探迹. ...

最新文章

  1. 一份MyBaits框架PDF文档,阿里架构师直言,Java程序员快收藏吧
  2. mysql数据库事务隔离级别
  3. IDEA打包发布jar包
  4. Teamcenter2007 安装步骤
  5. IT民工系列——通用7130芯片视频采集卡 SDK 兼容任意天敏 宏视 等板卡
  6. 深入分析.NET应用程序SQL注入【危害】
  7. siamfc代码解读_每日一文:目标跟踪(SiamFC)
  8. Android音量系统分析
  9. 微信开放平台修改应用名称
  10. 【转】cidaemon.exe进程CPU占用率高怎么办?
  11. SQL 多个字段的值拼接成Josn
  12. 笔记本显示宽带无法连接服务器,笔记本电脑连接不上网络怎么解决
  13. uni-app截屏截取页面可视区,以及利用截屏截取完整页面方法
  14. JavaDay27 HTML
  15. Centos7安装开启BBR加速
  16. 机器视觉与计算机视觉的区别与联系
  17. 10分钟教你用Python中的Matplotlib绘制多图并合并展示
  18. php activedocument-printout(),php二种读取和创建word文档方法
  19. 07-19 解决灰鸽子新变种 Rootkit Vanti gen等及www 58111 com劫持 第5版
  20. 计算机一级ps知识,计算机等级考试一级ps练习题及答案

热门文章

  1. 教你如何把视频转成序列图片的实用技巧
  2. 小程序顶部tab切换
  3. 基于STM32红外计数的灯光照明
  4. OA系统前台模板-html
  5. PDMS二次开发(三)——小试牛刀之材料DOTD属性批处理工具
  6. WPS用于论文作图以及如何正确获取会员
  7. 2022游戏出海:YouTube营销推广实用攻略
  8. 卡尔曼滤波原理和Matlab以及python代码实现
  9. WinDBG扩展命令的工作原理
  10. 用三种方式实现轮播图