cocos2d-x游戏开发 跑酷(四) 关联与物理世界
原创。转载注明出处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.5
- bodyDef.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游戏开发 跑酷(四) 关联与物理世界的更多相关文章
- cocos2d-x游戏开发 跑酷(两) 物理世界
原创.转载请注明出处:http://blog.csdn.net/dawn_moon/article/details/21240343 泰然的跑酷用的chipmunk物理引擎.我没有细致学过这个东西. ...
- iOS cocos2d 2游戏开发实战(第3版)书评
2013是游戏爆发的一年,手游用户也是飞速暴增.虽然自己不做游戏,但也是时刻了解手机应用开发的新动向.看到CSDN的"写书评得技术图书赢下载分"活动,就申请了一本<iOS c ...
- cocos2d-x游戏开发 跑酷(三) 人物跑动
原创.转载请注明出处:http://blog.csdn.net/dawn_moon/article/details/21245881 好吧.最终要跑起来了. 要实现跑酷须要用到帧动画,什么是帧动画,不 ...
- cocos2d-x游戏开发 跑酷(八) 对象管理 碰撞检測
对象管理类的原理是这种: ObjectManager类是一个单例类,全局仅仅有一个对象实例存在.初始化的时候创建两个数组CCArray来保存金币和岩石.为什么要保存,由于在地图重载的时候.要销毁看不见 ...
- cocos2d-x游戏开发 跑酷(九) 源代码下载及小结
这个东西零零碎碎写了一个礼拜吧. 事实上也没多少东西在里面.文章后附下载地址 博客地址:http://blog.csdn.net/dawn_moon 由于我没用过chipmunk,并且它是面向过程的东 ...
- 【转】cocos2d-x游戏开发(十四)用shader使图片背景透明
转自:http://blog.csdn.net/dawn_moon/article/details/8631783 好吧,终于抽时间写这篇文章了. 手头上有很多人物行走图,技能特效图等,但这些图都有个 ...
- HTML5 Canvas游戏开发(四)lufylegend开源库件(下)
一.文本 LTextField对象是lufylegend库件中专门用于显示文本信息的一个对象. 1.文本属性 创建的文本框对象不会自动加入可视化对象列表中.只有手动调用addChild()方法才能使它 ...
- CocosCreator游戏开发(四)实现摇杆控制角色功能
时隔3年,我又开始继续写这个系列的帖子了,也不知道是会写完全系列,还是再次夭折. 废话不多.直接开始主题了 主要实现的功能点包含这些内容:通过摇杆控制角色进行八方位移动,并按照各方位播放对应移动动画 ...
- cocos2d-x游戏开发(十七)NDK+ant编译暗黑世界
个人原创,欢迎转载http://blog.csdn.net/dawn_moon/article/details/12308967 9秒论坛的客户端暗黑世界,ios已经跑过了,今天搞了一下安卓的,记录一 ...
随机推荐
- js判断是否为pc端或移动端
function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = new Array("Android" ...
- 添加Main-Class到manifest中
Maven默认打包生成的jar是不能够直接运行的,因为带有main方法的类信息不会添加到manifest中(打开jar文件中的META-INF/MANIFEST.MF文件,将无法看到Main-Clas ...
- 利用FFT 计算生成离散解析信号
通常我们用到的信号都是实值信号,但是我们可以根据这个实信号构造出一个复信号,使得这个复信号只包含正频率部分,而且这个复信号的实部正好就是我们原来的实值信号.简单的推导可知,复信号的虚部是原信号的希尔伯 ...
- java基础之& 和 && 的差别
&和&&都能够用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,仅仅要有一方为false,则结果为false. ...
- php使用 _before_index() 来实现访问页面前,判断登录
C:\wamp\www\DEVOPS\Home\Lib\Action: <?php class IndexAction extends Action { function index(){ $t ...
- 一些实用的mysql语句(不断积累更新)
1.数据表里仅仅有生日字段,想计算出其年龄的mysql语句: SELECT *,DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW( ))-TO_DAYS(生日字段)),'%Y')+0 ...
- 设计模式6:Composite
Entry.java: package gendwang.cisco.com; public abstract class Entry { private int height = 0; privat ...
- 定义自己的仪表板DashBoard - -kankanstyle
既然做了奶站软件,需要使用的仪表板,显示质量数据 public class MDashboard extends ImageView { private Bitmap mPointerBitmap; ...
- 我们究竟什么时候可以使用Ehcache缓存(转)
一.Ehcache是什么 EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力. 二.Ehcache的使 ...
- Swift中使用typealias定义一个闭包closure
在OC中我们定义一个Blocks是这样定义的: typedef void (^ZWProgressHUDCompletionBlock)(); 在Swift中定义一个闭包是这种: typealias ...
