好久都没写文章了,就来一篇吧。这种方法是在制作《胖鸟大冒险》时用到的。《胖鸟大冒险》中使用Box2D来进行物理模拟和碰撞检測,因此对每一个机关须要创建一个b2body。然后《胖鸟》是依据《超级马里奥兄弟》设计的,所以机关能够是各种运动轨迹的平台,绕圈转的乌龟,蹦蹦跳的乌龟等。假设用box2d来做这些运动的话要自己写这些轨迹。可是Cocos2d-x已经提供了非常多的action,自己添加action也非常方便。反过来用sprite去设置box2d的b2body的位置就非常方便了。

要求:全部的机关都设置为body type为b2_kinematicBody,这个type的优点是能够有速度,可是不会物理模拟,而且能够和type为b2_dynamicBody的body发生碰撞检測。

如果我们用一个反复移动的平台机关为sprPlatform,这个平台反复上下移动,代码例如以下:

sprPlatform->runAction(CCRepeatForever::create(CCSequence::create(CCMoveBy::create(2, ccp(0, 100)),
CCMoveBy::create(2, ccp(0, -100)),
NULL)));

然后在sprPlatform的update里设置b2body的属性

void update(float delta)
{
//更新位置
float angle = getRotation();
CCPoint curPos = getPosition();
b2Vec2 shapeCenter(curPos.x/PTM_RATIO, curPos.y/PTM_RATIO);
body->SetTransform(shapeCenter, CC_DEGREES_TO_RADIANS(360-angle) ); //更新速度,这个是为了让机关保持匀速
body->SetLinearVelocity(b2Vec2((curPos.x-lastPos.x)/gPlatformMovingFactor, (curPos.y-lastPos.y)/gPlatformMovingFactor)); lastPos = curPos;
}

至于gPlatformMovingFactor,在《胖鸟》里为1.066681。由于b2_kinematicBody仅仅有速度没有质量,所以仅仅能依据某段时间内body移动了多少像素来计算这个数据。总之达到sprite的移动和b2body的移动匹配。b2_kinematicBody假设没有velocity的话,b2_dynamicBody就无法被platform带动。

另外须要注意的是b2body的anchor point是(0.5,0.5),而cocos2dx的sprite能够自己设置,所以须要自己做些简单的转换。

这样b2body就被sprite带动了。

Cocos2d-x中由sprite来驱动Box2D的body运动(用来制作平台游戏中多变的机关)的更多相关文章

  1. 使用 Spirit 类在 XNA 中创建游戏中的基本单位精灵(十三)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  2. Cocos2d 中的Sprite大小调整问题

    以前用UIImageView,比如  UIImageView *view = [[UIImageViewalloc] initWithImage:[UIImageimageNamed:@"b ...

  3. 【Unity3D基础教程】给初学者看的Unity教程(三):通过制作Flappy Bird了解Native 2D中的Sprite,Animation

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 上一次我们讲了MonoBehaviou ...

  4. 关于在cocos2dx中继承Sprite的分析与技巧

    (转载请注明原文:http://blog.csdn.net/while0/article/details/25615685) 本文章特指使用C++作为编程语言.基于cocos2dx游戏引擎开发游戏. ...

  5. 如何在Cocos2D游戏中实现A*寻路算法(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  6. 如何在Cocos2D游戏中实现A*寻路算法(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  7. untiy3d小工具——修改scene与prefab中的sprite

    坑1:因为替换图片要获取所有包含image的组件,开始我使用的是gameobject.getComponents<Image>()和FindObjectsOfType<Image&g ...

  8. 【转】通过制作Flappy Bird了解Native 2D中的Sprite,Animation

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 上一次我们讲了MonoBehaviou ...

  9. 怎样在QML中利用Sprite来做我们须要的动画

    在游戏中动画的设计很中要. 在QML中,它提供了丰富的animation.可是有时我们须要对图像进行变化,就像放电影一样.在今天的这篇文章中,我们将设计一个能够变化图像的动画. 我们能够通过Qt所提供 ...

随机推荐

  1. Mac下开发常用目录

    1:Snippets    Xcode 代码段的文件表示 ~/Library/Developer/Xcode/UserData/CodeSnippets/ 2: Services  可以添加workf ...

  2. uva 11768

    // 扩展欧几里得算法 // 先求出一个解 再求出区间 [x1,x2]有几个整数符合条件// 需要注意的是 水平和垂直2种情况的处理 还有正数和负数取整的细微差别#include <iostre ...

  3. Table '.\mysql\proc' is marked as crashed and should be repaired 报错

    Table '.\mysql\proc' is marked as crashed and should be repaired 报错 解决方法: 找到mysql的安装目录的bin/myisamchk ...

  4. 【大数阶乘】NYOJ-28

    大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数 ...

  5. 【转】Linux Posix Timer使用

    原文网址:http://blog.csdn.net/hongszh/article/details/8608781 最强大的定时器接口来自POSIX时钟系列,其创建.初始化以及删除一个定时器的行动被分 ...

  6. sharepoint 2010 在aspx 写lambda 时错误

    在sharepoint 2010 中,写lambda时,遇到错误.在aspx里面,写lambda表达式, 运行时报错,就不明道理了.经过百般测试,终于找到方法: 错误提示: "/" ...

  7. webdriver(python)学习笔记六——操作测试对象

    定位到具体对象后,就需要对其进行操作,比如点击.输入内容等. 一般来说,webdriver中比较常用的操作对象的方法有下面几个 click 点击对象 send_keys 在对象上模拟按键输入 clea ...

  8. 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(6)

    创建一个新文档(Creating a new document) 现在我们将尝试索引一些文档.对于我们的示例,让我们想象我们正在为我们的博客建立某种CMS.实体之一是博客的文章.使用JSON记法,在以 ...

  9. ASP.NET性能优化小结(ASP.NET&C#)

    ASP.NET: 一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库 ...

  10. HDU 1890 Robotic Sort(splay)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=1890 [题意] 给定一个序列,每次将i..P[i]反转,然后输出P[i],P[i]定义为当前数字i ...