原创,转载注明出处http://blog.csdn.net/dawn_moon/article/details/21451077

前面一节虽然实现了一个跑动的人物,但是他仅仅只是一个精灵在执行一个跑动的帧动画而已。这一节我要实现精灵和物理世界关联,让这个人跟实际的Parkour一样,有实际体积,会碰撞。

一个精灵怎么样和一个物理的body关联起来,使他具有一个刚体的特性。在cocos2d-x box2d 入门这篇文章里面,我有简单讲了一下。有人说将一个body的userData设为精灵就可以了,其实这是不够的。body的userData是一个void型指针,用来存放用户自定义数据。如果仅仅这样赋值一下,你会发现,精灵和刚体是分开运动的。这个userData是为了存放精灵,在后续位置迭代的时候方便取出这个精灵,然后将它和刚体的位置同步。看cocos2d-x box2d 入门里面的update函数,就知道还需要做位置迭代的。

为了方便,我把引擎自带的物理精灵CCPhysicsSprite改了一下,去掉了chipmunk的代码,保留了box2d的接口。这个就是一个box2d的物理精灵B2Sprite。

然后将Runner里面的成员变量mRunner类型改成B2Sprite,其创建函数也要修改为

 mRunner = B2Sprite::createWithSpriteFrameName(runner0);mRunnerSize = mRunner->getContentSize();

然后实现initBody()和initShape()函数

void Runner::initBody()
{b2BodyDef bodyDef;bodyDef.type = b2_dynamicBody;// 初始速度1.5bodyDef.linearVelocity = b2Vec2(1.5, 0);bodyDef.position = b2Vec2(getOffsetPx() / RATIO, (GROUND_HEIGHT + mRunnerSize.height / 2 )/ RATIO);mBody = mWorld->CreateBody(&bodyDef);// 关联起来mRunner->setB2Body(mBody);mRunner->setPTMRatio(RATIO);
}void Runner::initShape()
{b2PolygonShape shape;// 定义runner的形状,一个box,参数是半宽高shape.SetAsBox(mRunnerSize.width / 2 / RATIO, mRunnerSize.height / 2 / RATIO);b2FixtureDef fixDef;fixDef.shape = &shape;mBody->CreateFixture(&fixDef);
}

然后跑起来就看到一个带碰撞区域的精灵

cocos2d-x游戏开发 跑酷(四) 关联物理世界相关推荐

  1. cocos2d-x游戏开发 跑酷(四) 关联与物理世界

    原创.转载注明出处http://blog.csdn.net/dawn_moon/article/details/21451077 前面一节尽管实现了一个跑动的人物,可是他只不过一个精灵在运行一个跑动的 ...

  2. Cocos2D手机游戏开发之优化篇

    Cocos2D手机游戏开发之优化篇 在这个手机游戏盛行已久的年代,一款产品想要博得更多用户的喜爱就要在细节上做得更加到位.而游戏的优化在这里面起到了非常关键的作用.试想下,一款画面和玩法都深受用户喜欢 ...

  3. iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!

    2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...

  4. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)    邮箱: happylifemxy@163.com 本篇文章里,我们首先对Direct3D之中固定功能流水线中的 ...

  5. 【Visual C++】游戏开发笔记四十六 浅墨DirectX教程十四 模板测试与镜面特效专场

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处.   文章链接: http://blog.csdn.net/zhmxy555/article/details/8632184 作者:毛星云( ...

  6. iOS cocos2d 2游戏开发实战(第3版)

    <iOS cocos2d 2游戏开发实战(第3版)> 基本信息 原书名:Learn cocos2d 2: Game Development for iOS 作者: (美)Steffen I ...

  7. 【通知】▁▂▃ Himi 最新著作《iOS游戏编程之从零开始—Cocos2d-x与cocos2d引擎游戏开发》★书籍源码+第4/5/6样章★-免费下载★ ▃▂▁

    2013年新年,Himi的第二本著作:<iOS游戏编程之从零开始-Cocos2d-x与cocos2d引擎游戏开发>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买) ...

  8. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩 纹理映射技术 二

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  9. 《Cocos2d 跨平台游戏开发指南(第2版)》一1.9 添加动作到精灵

    本节书摘来异步社区<Cocos2d 跨平台游戏开发指南(第2版)>一书中的第1章,第1.9节,作者: [印度]Siddharth Shekar(谢卡)译者: 武传海 责编: 胡俊英,更多章 ...

最新文章

  1. 深度学习的多个 loss 是如何平衡的?
  2. 红帽OpenShift总经理谈容器技术需要关注的方向
  3. 国内程序员最容易发音错误的单词集合
  4. py文件转exe时包含paramiko模块出错解决方法
  5. Linux 路径和目录问题
  6. HALCON示例程序inspect_bottle_mouth.hdev玻璃瓶口缺陷检测
  7. C语言: ---Linux下ulimit是什么鬼
  8. 做了nginx反向代理之后常见问题汇总
  9. java 获取 jframe 内容_Java如何获取组件的JFrame?
  10. mysql longtext db2_从 MySQL 或 PostgreSQL 迁移到 DB2 Express-C
  11. WEB应用安全解决方案测试验证
  12. ajax简单做html查询删除(鲜花)
  13. 深度学习框架PyTorch:入门与实践 学习(四)
  14. DDR3 Vivado 仿真测试成功
  15. 【HTML 教程系列第 10 篇】什么是 HTML 中的水平线标签 hr
  16. linux系统安装文网卫士,360主机卫士 linux版的安装/使用/卸载 方法
  17. LeetCode148经典题目记录(链表排序:快排+递归归并+迭代归并)
  18. 网易云解锁配置(windows)
  19. JSD-2204-(业务逻辑开发)-发酷鲨商城front模块-开发购物车功能-Day09
  20. 计算机网络技术线路连接,计算机网络基础知识之电路交换(CircuitSwitching)

热门文章

  1. 国学*周易*梅花易数 代码实现效果展示 - 梅花心易
  2. SHT10型温湿度传感器工作时序分析及驱动程序与Proteus仿真的实现
  3. 对dz模板的一些注释
  4. CodeForces 1K-1600R-1407C Chocolate Bunny
  5. vue生命周期方法(钩子函数)初始化数据一般写在哪里
  6. Calendars and DateFormats should not be static
  7. 华为R5和linux版什么区别,荣耀MagicBook 15锐龙版r5第三方Linux版怎么样?上手跑分评测...
  8. 【自建分布式数据库详细指南】(四)设计:CITUS分布式数据仓库OLAP/OLTP的架构选择及PG数据库优化方法策略
  9. Python遥感可视化 — Basemap作Albers投影
  10. 2019年起微信和支付宝都必须执行的新规定,你知道吗?