cocos2d 高仿doodle jump 无源代码
1. 游戏视频
主角眼熟吗?没错,上次跑酷游戏中的“30”来Jump了,有三种道具。主角光环,竹蜻蜓。翅膀; 有两种怪物,螃蟹和鸟; 有5种板子。点击屏幕,30会把它的嘴巴3给发射出去。能够攻击怪物。
上次的跑酷參考《cocos2d 简单高仿天天跑酷游戏》 。苹果已经审核通过...但做的很差,兴许有时间再更新。后面考虑会出很多其它的该主角游戏。
事实上蛮讨厌"高仿"这两个字的,争取下一款游戏有很多其它原创部分。
2.向上跳的位移实现
有一个Camera,它的位置跟着主角来移动就能够了。
就这么简单。
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。
这里游戏的玩法就是怎样控制生成板子。我必须承认这块做的还不好。
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.主角光环和抛物线掉落
仅仅用到了左边红色的部分。
6. 其它
这里就不再赘述。
有真正游戏的感觉。
cocos2d 高仿doodle jump 无源代码的更多相关文章
- Android高仿雅虎天气(两)---代码结构分析
版本已经升级到1.0.1 源码地址: GitHub:https://github.com/way1989/WayHoo OsChina:http://git.oschina.net/way/WayHo ...
- iOS高仿app源码:纯代码打造高仿优质《内涵段子》
iOS高仿app源码:纯代码打造高仿优质<内涵段子>收藏下来 字数1950 阅读4999 评论173 喜欢133 Github 地址 https://github.com/Charlesy ...
- [MFC] 高仿Flappy bird 桌面版
这是今年年初做的东西,一直没有时间整理,现在拿出来分享下~ 目录 开发背景 开发语言及运行环境 效果展示 游戏框架说明 游戏状态及逻辑说明 经典算法说明 重量级问题解决 开发感想 一.开发背景: fl ...
- Android -- 真正的 高仿微信 打开网页的进度条效果
(本博客为原创,http://www.cnblogs.com/linguanh/) 目录: 一,为什么说是真正的高仿? 二,为什么要搞缓慢效果? 三,我的实现思路 四,代码,内含注释 五,使用方法与截 ...
- 微信小程序开发日记——高仿知乎日报(下)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...
- 微信小程序开发日记——高仿知乎日报(中)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...
- 微信小程序开发日记——高仿知乎日报(上)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...
- 高仿ios版美团框架项目源码
高仿美团框架基本已搭好.代码简单易懂,适合新人.适合新人.新人. <ignore_js_op> 源码你可以到ios教程网那里下载吧,这里我就不上传了,http://ios.662p ...
- 分享iOS开发常用(三方类库,工具,高仿APP,实用网站,技术干货)
一 . JSONModel (三方类库会有更新,建议大家在线下载) http://pan.baidu.com/s/1i5ybP1z 二.AFNetworkiong http://pan.baidu. ...
随机推荐
- Objective-C学习篇01—类的声明与实现
Objective-C,是美国人布莱德·确斯(Brad Cox)于 1980 年年初发明的一 种程序设计语言,其与同时代的 C++ 一样,都是在 C 的基础上加入面向对象特性扩充而成的.Objecti ...
- Char Varchar Nvarchar区别
char和varchar是一样的字符型,不同在于,varchar比char更灵活,精确,且不占内存空间,当你取同样的字符时,char会在该字符后面加上空格,而varchar则只取得这个字符,比如有字段 ...
- Specified VM install not found: type Standard VM, name jdk1.6.0_05
重装系统换了jdk,之前jdk用的1.6,现在改成1.7了.但是更新之后发现ant打包用不了了,报错 Specified VM install not found: type Standard VM, ...
- ActiveReports 交互式报表之向下钻取解决方案
在 ActiveReports 中可以动态的显示或者隐藏某区域的数据,通过该功能用户可以根据需要显示或者隐藏所关心的数据,结合数据排序.过滤等功能可以让用户更方便地分析报表数据. 本文中展示的是销售数 ...
- 将CSS CLIP属性应用在:扩展覆盖效果
我们想要展示如何利用CSS3 clip属性制作一种简单而整洁的扩展效果,当点击一个box元素时实现平稳过渡.这个想法是为了实现某种叠加效果,好像它实际上在各个元素的下面.点击其中一个元素将创建一个切断 ...
- IOS开发之UIScrollView
一.UIScrollView的边界处理问题: bounds属性: (1)当bounces属性设置为YES时,当UIScrollView中图片滑动到边界的时候会出现弹动的效果,就像是Linux中的果冻效 ...
- 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }
转自:http://www.cnblogs.com/xiaofei59/archive/2010/11/25/1887285.html 异常{ 无法将 匿名方法 转换为类型“System.Delega ...
- websphere节点、单元、服务之间的关系
单元(cell).节点(node).概要文件(profile).服务(server) 在websphere集群(ND版本)模式下: 一个cell单元可以包含多个node节点,node=profile, ...
- highcharts实例教程一:结合php与mysql生成折线图
Highcharts是一款纯javascript和html5编写的图表库,不仅几乎能兼容所有pc浏览器,而且对ios和android手机端的兼容 性也不错,它能够很简单便捷的在Web网站或Web应用中 ...
- laravel框架——保存用户登陆信息(session)
public function inlog(Request $request) { //获取表单提交的数据 $input = $request->all(); //根本获取的数据去数据库中查询 ...