原创。转载注明出处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,其创建函数也要改动为

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

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

  1. void Runner::initBody()
  2. {
  3. b2BodyDef bodyDef;
  4. bodyDef.type = b2_dynamicBody;
  5. // 初始速度1.5
  6. bodyDef.linearVelocity = b2Vec2(1.5, 0);
  7. bodyDef.position = b2Vec2(getOffsetPx() / RATIO, (GROUND_HEIGHT + mRunnerSize.height / 2 )/ RATIO);
  8. mBody = mWorld->CreateBody(&bodyDef);
  9. // 关联起来
  10. mRunner->setB2Body(mBody);
  11. mRunner->setPTMRatio(RATIO);
  12. }
  13. void Runner::initShape()
  14. {
  15. b2PolygonShape shape;
  16. // 定义runner的形状,一个box,參数是半宽高
  17. shape.SetAsBox(mRunnerSize.width / 2 / RATIO, mRunnerSize.height / 2 / RATIO);
  18. b2FixtureDef fixDef;
  19. fixDef.shape = &shape;
  20. mBody->CreateFixture(&fixDef);
  21. }

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

最新文章

  1. WinForm 调用 PrintDocument
  2. jsonp 自己写的一个例子
  3. 【UE4+Vive】学习笔记1
  4. 配置JAVA环境变量
  5. 通过PowerShell获取TCP响应(类Telnet)
  6. 让你的PHP更安全之PHP.ini
  7. C#拉姆达(=>)表达式
  8. C#对HTML转译需要注意的问题
  9. 接入淘宝API(PHP版本)
  10. Spring入门(6)-使用注解装配
  11. DHCP服务自动分配IP地址原理
  12. JS帮你计算属相
  13. Android 应用开发推荐书单
  14. Java基础学习 —— io
  15. [模板] 回文树/回文自动机 && BZOJ3676:[Apio2014]回文串
  16. {windows故障}关于WIN7故障模块StackHash_0a9e解决方法
  17. echarts使用笔记一:基本属性
  18. MyISAM to InnoDB: Why and How(MYSQL官方译文)
  19. 2018-2019 2 20165203 《网络对抗技术》 Exp1 PC平台逆向破解
  20. Tensorflow学习笔记01

热门文章

  1. PCB设计资料:看到最后才知道是福利
  2. Java 生成本文文件的时候,Dos格式转成Unix格式
  3. 更改ORACLE 用户的 expired状态
  4. mp3播放器
  5. Cocos2dx3.1 获取当前系统时间
  6. NGUI: Documentation
  7. ARC内存使用注意事项
  8. uva 568(数学)
  9. Swift - 创建并设置背景(SpriteKit游戏开发)
  10. zipkin分布式链路追踪系统