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已经跑过了,今天搞了一下安卓的,记录一 ...
随机推荐
- STL之iterator(迭代器)
3.迭代器简单介绍 除了使用下标来訪问vector对象的元素外,标准库还提供了訪问元素的方法:使用迭代器.迭代器是一种检查容器内元素而且遍历元素的数据类型. 百科释义: 迭代器(iterator)是一 ...
- zoj 1730 / poj 1455 Crazy Tea Party
这阵子都没怎么写代码,由于开学,忙于各种琐碎的事情,现在静下来了开始跟着暑假的节奏刷题了. 这道题一开是没看清题目-在寝室刷题就是效率不高... 后来才知道,题目意思是,一个环形序列,1minute可 ...
- Java面试宝典2014版
一. Java基础部分......................................................................................... ...
- 【水】HDU 2099——整除的尾数
来源:点击打开链接 数据范围小,枚举水过就行了……不过要注意格式! #include <iostream> #include <cstring> #include <io ...
- C++ 观察者模式样例
C++ 观察者模式样例 #include <iostream> #include <set> #include <string> using namespace s ...
- 【MongoDB】在windows平台下搭建mongodb的分片集群(二)
在上一片博客中我们讲了Mongodb数据库中分片集群的主要原理. 在本篇博客中我们主要讲描写叙述分片集群的搭建过程.配置分片集群主要有两个步骤.第一启动全部须要的mongod和mongos进程. 第二 ...
- android ListView中CheckBox错位的解决
貌似已经非常晚了,可是还是想记下笔记,想让今天完满. 在ListView中加了checkBox,但是发现点击改变其选中状态的时候,发现其位置错乱.状态改变的并非你选中的,百思不得其解.后面通过上网查资 ...
- Redisql: the lightning fast data polyglot【翻译】 - Linvo's blog - 博客频道 - CSDN.NET
Redisql: the lightning fast data polyglot[翻译] - Linvo's blog - 博客频道 - CSDN.NET Redisql: the lightnin ...
- JSTL解析——004——core标签库03
上面章节主要讲解<c:forEach>标签,下面讲解其它标签 1.<c:forTokens>标签 forTokens标签与forEach标签类似,独有begin.end.ste ...
- Photon的使用
这几个月给公司一个正在做的半吊子游戏加pvp功能,一个人居然要2个多月弄个 PVP 类似 Dota 对战的游戏.我手里有套现成搭建服务端架构都没敢用起来,这服务器还是太初步了,只是验证了 Boost ...
