1.第一个直接看看这个游戏看起来视频(GIF我们不能满足游戏展)

跑酷游戏最纠结的是地图。碰撞倒是简单,能够自己写或者使用box2d等物理引擎。跑酷游戏地图的特点就是随机性。可是随机中又有策划特意安排的部分。这样让玩家有小小惊喜。所以我就打算这样实现:用地图编辑器编写个几十个地图,然后洗牌掉,从第一个開始取,直到最后最后一个后。再又一次洗牌,取第一个。这样就能突出天天跑酷游戏的特点。

随机中又有特定安排。

游戏中绘制地图当然不能一次所有完毕,那样太慢了。

手机屏幕横向就那么长,初始化两个地图就够了,当快要穿帮时,赶紧绘制一个新的地图贴在第二个地图后面。第一个地图移到屏幕左边时,能够删掉了。这样一直保持两个地图就够了。跟背景反复移动相似。

2.自己定义简单地图编辑器

决定使用地图编辑器后,一个问题就是使用Tiled Map 还是自己做一个。

Tiled Map让我不喜欢的地方是它每个方块都是一个精灵,这样大块的图片会被切割成小块的图,效率非常低。假设使用自己定义object。又不能实时看地图效果。就尝试自己写一个简单的地图编辑器来供这个游戏使用。

我的需求:能够拖动元素摆到地图上,然后导出一个文件。里面有我自己定义格式的内容,供我游戏中使用。

用什么来做是接下来的问题:

地图编辑器能够用普通的Qt来实现,做出来相似Tiled Map的效果。Tiled Map是开源的,能够參考它实现一个。可是没时间这样搞啊。就用cocos2d来做地图编辑器了。当然想要实现非常复杂的编辑器推荐还是參考Tiled Map。

简单地做了一个地图编辑器的Demo,发现比想象中的简单:

就是初始一些小的精灵放在最右边,不可移动。

每次touch他们的时候,生成一个新的精灵。而且这个精灵是能够拖动的。这样就能够随意摆放了。

地图文件数据该用什么格式来存储呢?

大致XML。Json是我考虑的两种。认为Json会好点,将来做Cocos2d JS。能够直接包括进来都不须要解析。当然C++这边还是要解析的。Cocos2d 自带 rapid json,解析也不是问题。就决定使用json了。

数据格式大致是这种:

{
"Bones": [{
"positionX": 1657.18,
"positionY": 345.044
}, {
"positionX": 1522.69,
"positionY": 336.114
}, {
"positionX": 1435.41,
"positionY": 259.934
}],
"TopBlocks": [{
"positionX": 2439.34
}],
"Blocks": [{
"blockType": 2
}, {
"blockType": 0
}, {
"blockType": 2
}}]
}

地图编辑器是以下这种

简单一个列表。点击一个地图,就编辑一个文件。由于是跑酷游戏。所以这个地图编辑器比較长,有3000像素左右。当然还能够往右无限移动。

3.简单碰撞

碰撞这里我也是自己写的,没实用物理引擎。也比較easy。

一个小技巧是给主角一个nextPositin的变量。跑酷会不断改变这个值,通过碰撞后,才真正把角色的position值设置为nextPosition。

一张图来说:

 for(Square* square : squares){

        if(hero->nextRight() >= square->getLeft()){
//右边碰撞
if(hero->right() < square->getLeft()){
if(hero->bottom() < square->getTop() && hero->top() > square->getBottom()){
hero->fixRightColl(square);//碰撞修复和触发事件
}
}
if(hero->left() <= square->getRight()){
//以下碰撞
if(hero->bottom() >= square->getTop() && hero->nextBottom() <= square->getTop() && hero->top() > square->getTop()){
hero->fixTopColl(square);//碰撞修复和触发事件
}
//上面碰撞
else if(hero->top() <= square->getBottom() && hero->nextTop() >= square->getBottom() && hero->bottom() < square->getTop()){
//碰撞后做的事情
}
}
}
}

当然碰撞金币等东西。直接推断两个矩形是否相交即可。

    for(Bone* bone : bones){

        if(hero->right() >= bone->getLeft()){
if(bone->getRect().intersectsRect(hero->getRect())){
bone->removeFromParent();
bones.eraseObject(bone);
sRunGlobal->boneCount = sRunGlobal->boneCount + 1;
RunSound::playEffect(boneEffectName);
break;
}
} }

4.对象反复使用

跑酷游戏设计到大量的对象创建,消除。

一定要反复使用对象,搞个简单的缓存池即可了。能够參考这篇文《cocos2d 缓存池 对象反复使用

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

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

版权声明:本文博主原创文章,博客,未经同意不得转载。

cocos2d 简单的日常高仿酷跑游戏的更多相关文章

  1. Delphi高仿Windows扫雷游戏(全部都是贴图绘制)

    http://www.newxing.com/Code/Delphi/game/543.html http://www.newxing.com/Code/Delphi/Network/1324.htm ...

  2. cocos2d 高仿doodle jump 无源代码

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

  3. 实例源码--IOS高仿微信打飞机游戏(完整功能)

    下载源码 技术要点: 1. IOS游戏开发基础框架 2. 高仿打飞机游戏 3. 游戏背景音频技术 4.源码详细的中文注释 ……. 详细介绍: 1. IOS游戏开发基础框架 此套源码为涉及IOS游戏开发 ...

  4. 史上最简单,一步集成侧滑(删除)菜单,高仿QQ、IOS。

    重要的话 开头说,not for the RecyclerView or ListView, for the Any ViewGroup. 本控件不依赖任何父布局,不是针对 RecyclerView. ...

  5. Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高仿MIUI

    1.概述 哈,今天给大家带来一个ViewPagerIndicator的制作,相信大家在做tabIndicator的时候,大多数人都用过 TabPageIndicator,并且很多知名APP都使用过这个 ...

  6. Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷

    Android高级控件(四)--VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷 是不是感觉QQ空间什么的每次新版本更新那炫炫的引导页就特别的激动,哈哈,其实他实现起来真的很简单很 ...

  7. 高仿京东到家APP引导页炫酷动画效果

    前言 京东到家APP的引导页做的可圈可点,插画+动效,简明生动地说明了APP最吸引用户的几个亮点(商品多,价格低,配送快...).本文主要分析拆解这些动画效果,并完成一个高仿Demo,完整的Demo代 ...

  8. 高仿QQ Xplan的H5页面

    概述 这个h5的主要玩法很简单:地球自转的时候会播放背景音乐(比如海浪声),为了找到这个声音是从哪个地球上哪个地方传来的,需要长按下方的按钮,这时地球会自动转动到目标地点,然后镜头拉近,穿过云层,最后 ...

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

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

随机推荐

  1. 第五章_JSTL

    5.1.下载JSTL http://jstl.java.net 5.2.JSTL类库 类别 下属功能 URI 前缀 Core 变量支持 http://java.sun.com/jsp/jstl/cor ...

  2. C++使用函数模板

    函数模板: 函数模板是蓝图或处方功能,编译器使用其发电功能系列中的新成员. 第一次使用时,新的功能是创建.从功能模板生成的函数的实例称为模板或模板的实例.函数模板的开始是keywordtemplate ...

  3. Form表单中的action路径问题

    今天刚接触web,在用jsp和servlet做一个简单的登陆的时候在Form表单action属性和method属性的一些问题:  我遇到的是Form表单提交到servelet处理时遇到的问题:  (1 ...

  4. SQLSERVER图片查看工具SQL Image Viewer5.5.0.156

    原文:SQLSERVER图片查看工具SQL Image Viewer5.5.0.156 SQLSERVER图片查看工具SQL Image Viewer5.5.0.156 在2013年某一次北京SQL ...

  5. 【原创】poj ----- 3009 curling 2 解题报告

    题目地址: http://poj.org/problem?id=3009 题目内容: Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Tot ...

  6. spring html5 拖拽上传多文件

    注:这仅仅是一个粗略笔记.有些代码可能没用.兴许会再更新一个能够使用的版本号.不足之处,敬请见谅. 1.spring环境搭建,这里使用的是spring3的jar,须要同一时候引入common-IO 和 ...

  7. iOS 获取联系人,并调用系统地址簿UI

    1.加入 AddressBook库 推断授权状态 -(bool)checkAddressBookAuthorizationStatus { //取得授权状态 ABAuthorizationStatus ...

  8. wamp无法登录phpmyadmin问题

    文章来源:PHP座谈会 地址:http://bbs.phpthinking.com/forum.php? mod=viewthread&tid=163 第一步.用navicat确认一下,自己的 ...

  9. javascript从定义到执行 js引擎 闭包

    javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境 栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链 ...

  10. iOS开发那些事-iOS6苹果地图有用开发

    在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,可是API编程接口没有太大的变化.开发者不须要再学习非常多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也相同适用于iOS5 ...