1. 游戏视频

主角眼熟吗?没错,上次跑酷游戏中的“30”来Jump了,有三种道具。主角光环,竹蜻蜓。翅膀; 有两种怪物,螃蟹和鸟; 有5种板子。点击屏幕,30会把它的嘴巴3给发射出去。能够攻击怪物。

上次的跑酷參考cocos2d 简单高仿天天跑酷游戏》 。苹果已经审核通过...但做的很差,兴许有时间再更新。后面考虑会出很多其它的该主角游戏。

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

2.向上跳的位移实现

正常情况下,不使用不论什么的东西,主角在板子上跳,会跳出最上面的屏幕就看不到了!没有视频中主角一直在屏幕中间的感觉。那么怎样实现这种效果呢?很简单。

这里不得不吐槽下cocos2d, 学过Opengl 或者 DirectX的,都应该知道有Camera这么一个东西存在,2D游戏仅仅是选择了平行投射(parallel projection)參考这篇文章《DirectX Camera》 .但3.2 之前的Camera根本不能用,3.3才加入了Camera. 假设用Camera这里会很easy实现,也跟现实比較吻合。
1.假设使用Camera,全部板的PositionY 就定死的。越高的板,它的PositionY 就越大。主角往上跳时。主角的PositionY也不断变大。

有一个Camera,它的位置跟着主角来移动就能够了。

就这么简单。

2.不使用Camera。我用的是3.2的cocos2d,所以不好使用Camera,採用了移动整个Layer的实现。主角会跳出最上面的屏幕的,怎么办的?把整个Layer往下移动就能够了。
float minPositionY = 0;
void update(float dt){
//follow the hero
float 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 boards
JumpBoard *lastBoard = _boardObjects.back();
generateSomeBoards(lastBoard->getPositionX(), lastBoard->getPositionY() + getGeneratorHigh(),5);
}
//remove unused boards
JumpBoard* firstBoard = _boardObjects.front();
if(hero->getPositionY() - firstBoard->getPositionY() > 600){
firstBoard->removeFromParent();
_boardObjects.pop_front();
} }

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

游戏要考虑的东西很多:
1.刚開始的时候两个板之间的距离要短些,看起来会密些,这样游戏会easy上手些,两个板之间的距离会随着主角的变高而增大。
2.刚開始的时候生成板的类型要简单些,我这里仅仅有最两种类型。到后面才会出现各种类型的板。
我如今越来越意识到,假设一个游戏的主要玩法能让不懂程序逻辑的策划很easy改动的话。这个游戏写的就还不错。

这里游戏的玩法就是怎样控制生成板子。我必须承认这块做的还不好。

typedef enum{
kNormalBoard, //0
kCloudBoard, //1
kMoveBoard, //2
kMoveLttleBoard, //3
kSpringBoard //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. Android高仿雅虎天气(两)---代码结构分析

    版本已经升级到1.0.1 源码地址: GitHub:https://github.com/way1989/WayHoo OsChina:http://git.oschina.net/way/WayHo ...

  2. iOS高仿app源码:纯代码打造高仿优质《内涵段子》

    iOS高仿app源码:纯代码打造高仿优质<内涵段子>收藏下来 字数1950 阅读4999 评论173 喜欢133 Github 地址 https://github.com/Charlesy ...

  3. [MFC] 高仿Flappy bird 桌面版

    这是今年年初做的东西,一直没有时间整理,现在拿出来分享下~ 目录 开发背景 开发语言及运行环境 效果展示 游戏框架说明 游戏状态及逻辑说明 经典算法说明 重量级问题解决 开发感想 一.开发背景: fl ...

  4. Android -- 真正的 高仿微信 打开网页的进度条效果

    (本博客为原创,http://www.cnblogs.com/linguanh/) 目录: 一,为什么说是真正的高仿? 二,为什么要搞缓慢效果? 三,我的实现思路 四,代码,内含注释 五,使用方法与截 ...

  5. 微信小程序开发日记——高仿知乎日报(下)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  6. 微信小程序开发日记——高仿知乎日报(中)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...

  7. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  8. 高仿ios版美团框架项目源码

    高仿美团框架基本已搭好.代码简单易懂,适合新人.适合新人.新人. <ignore_js_op>     源码你可以到ios教程网那里下载吧,这里我就不上传了,http://ios.662p ...

  9. 分享iOS开发常用(三方类库,工具,高仿APP,实用网站,技术干货)

    一 . JSONModel  (三方类库会有更新,建议大家在线下载) http://pan.baidu.com/s/1i5ybP1z 二.AFNetworkiong http://pan.baidu. ...

随机推荐

  1. WPF 弱事件

    因为在接触WPF的过程中追查INotifyPropertyChanged的通知原理的时候,发现了 PropertyChangedEventManager这个类,它是继承与WeakEventManage ...

  2. hello,boke

    我一名学习软件工程金融服务工程的学生,简单来说就是学习计算机类的,对于自己的介绍,从平时生活中来说吧,我一直处于一种很中规中矩的生活状态里,平时玩玩手机.追追剧.和室友一起去图书馆自习,考前拼命复习两 ...

  3. [个人原创]关于java中对象排序的一些探讨(三)

    这篇文章由十八子将原创,转载请注明,并标明博客地址:http://www.cnblogs.com/shibazijiang/ 对对象排序也可以使用Guava中的Ordering类. 构造Orderin ...

  4. [个人原创]关于java中对象排序的一些探讨(一)

    有的时候我们需要将自己定义的对象,有序输出.因为一般我们程序的中间结果需要存储在容器里,那么怎样对容器中的对象按照一定次序输出就是程序员经常需要考虑的问题.本片文章探讨了怎样有序化输出容器中的对象的问 ...

  5. C语言的printf输出格式控制

    C语言的printf输出格式控制 printf大家都耳熟能详,但是能真正将其用法弄透的估计很少见. 转一篇,改天整理. 1.转换说明符 %a(%A)     浮点数.十六进制数字和p-(P-)记数法( ...

  6. jQuery实现checkbox全选反选及删除等操作

    1.list.html 说明:用checkbox数组Check[]存放每一行的ID值 <div id="con"> <table width="100% ...

  7. TFS使用小技巧

    前述: TFS是微软自家的项目管理软件 link:TFS2012团队管理基本配置及基础使用方法 碰到的问题: 一.[高级—>获取特定版本] 今天做的一个项目,自己引用程序集出错,一直没找到解决方 ...

  8. 怎样在Swift中使用CocoaPods-b

    最近关于CocoaPods有很多的议论.你可能从别的开发者那里听到过,或者在Github的目录中看到过.如果你之前从来没有用过,你可能会问,"CocoaPods到底是什么?" 它不 ...

  9. Lambert

    Dmap -- 贴图信息 LightColor  -- 灯光颜色 KL -- 灯光强度值(开放给美术) EnvColor -- 环境颜色 ka -- 环境光强度 (开放给美术) Dmap * (max ...

  10. 从Profile中窥探Unity的内存管理

    刨根问底U3D---从Profile中窥探Unity的内存管理 这篇文章包含哪些内容 这篇文章从Unity的Profile组件入手,来探讨一下Unity在开发环境和正式环境中的内存使用发面的一些区别, ...