cocos2dx 3.1.1物理引擎做个晃绳子的小demo
2014-12-11 10:09
1091 查看
这几天都在学习cc3.x的物理引擎,自从3.x版本之后,cc就把两大引擎box2d和chipmunk封装起来了啊,用起来方便多了,对于我这个对物理引擎从没了解的人也上手起来了啊。物理引擎对于在什么跑酷之类的游戏中还是作用蛮大的啊,碰撞还是在所难免的。对于物理引擎中的各种基本概念,比如物理边界,重力加度,关节等等,网上一大堆资料,我就不罗嗦了。cc3.x默认用的是chipmunk,你也可以改用box2d。
以前我遇到一个大神用html5做了一个简单的晃绳子的小demo.链接是http://www.html5cn.org/article-5149-1.html。
这个游戏是模仿一个小人抓在一条绳子上,然后你开始用鼠标按住屏幕,然后左右来回动,小人也跟着来回晃动,有没有一点真实的赶脚啊,松开鼠标之后人就被抛出去了。然后计算人抛出去的距离,计算你的排名。大神用了2,3个小时就搞定了。对于我这个菜鸟,用了2,3天才琢磨出来。虽然耗费了更多的时间,但是也学到了东西,我想这就是成长吧。
这个demo中没多少代码,但是就是模仿绳子来回晃的样子要花时间。一下是一个样子图片:
1.绳子的绘制
首先说明绳子必须要有物理特性,不能是一根全是直的,要在外力的作用下能模仿实际的弯曲现象,所以你用图片,做成动画Animation就明显不行了。用drawNode画线条呢,也不行,因为线条无法加入物理特性。
想了好久才,看了大神的文章,才明白了。一根绳子可以是很多刚体连在一起,刚体之间用关节连在一起,如下图所示
所以代码中要设置成:
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
这句话原本是在调试模式下显示所有的刚体和关节,碰撞,一般游戏做好之后是要删除的。但是我们这个绳子的制作就不能删除这句话了,不然什么都看不见。
但是我们不想看到红色的刚体,只留下关节。所以要设置成:
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_JOINT);
但是你会发现绳子上一节有一个圆点,这个圆点怎么删除呢。想了半天,去看源代码吧。
在PhysicsDebugDraw类中,drawJoint函数就是绘制关节的,以下是这个函数的源代码的一部分
void PhysicsDebugDraw::drawJoint(PhysicsJoint& joint)
{
const Color4F lineColor(0.0f, 0.0f, 1.0f, 1.0f); //绘制关节线条的颜色
const Color4F jointPointColor(0.0f, 1.0f, 0.0f, 1.0f);//绘制关节点的颜色
我们可以看到线条是蓝颜色,关节点是绿颜色,我们要不显示节点,所以节点颜色要和线条一样
const Color4F jointPointColor(0.0f, 0.0f, 1.0f, 1.0f)
真正绘制线条的语句是
_drawNode->drawSegment(PhysicsHelper::cpv2point(a), PhysicsHelper::cpv2point(b), 3, lineColor);
真正绘制节点的语句是
_drawNode->drawDot(PhysicsHelper::cpv2point(a), 2, jointPointColor);
}
这个函数中所有的绘制节点的语句_drawNode->drawDot,我们都要屏蔽掉,这样子就看不到节点的绘制了
简单的来说源代码中要修的就是两点,一个修改节点颜色,一个是屏蔽掉节点的绘制语句。
改完之后就是下面这个样子:
有点绳子的样子了吧,不过有点锯齿状啊,将线条绘制语句中半径设置小点,默认是3,改成1,会好点。
再下来就是选择何种关节类型了,3.x physics中给出了11种关节类型
最后我选择了PhysicsJointDistance,其中PhysicsJointLimit晃动性太大了,满足不了,PhysicsJointSpring是弹簧类型,满足不了。下面是运行的一个图片
触摸检测和碰撞检测了,没什么好说的,代码写的很乱,大家多多包涵啊,我已上传到了http://download.csdn.net/detail/fanzhang1990/8241783
以前我遇到一个大神用html5做了一个简单的晃绳子的小demo.链接是http://www.html5cn.org/article-5149-1.html。
这个游戏是模仿一个小人抓在一条绳子上,然后你开始用鼠标按住屏幕,然后左右来回动,小人也跟着来回晃动,有没有一点真实的赶脚啊,松开鼠标之后人就被抛出去了。然后计算人抛出去的距离,计算你的排名。大神用了2,3个小时就搞定了。对于我这个菜鸟,用了2,3天才琢磨出来。虽然耗费了更多的时间,但是也学到了东西,我想这就是成长吧。
这个demo中没多少代码,但是就是模仿绳子来回晃的样子要花时间。一下是一个样子图片:
1.绳子的绘制
首先说明绳子必须要有物理特性,不能是一根全是直的,要在外力的作用下能模仿实际的弯曲现象,所以你用图片,做成动画Animation就明显不行了。用drawNode画线条呢,也不行,因为线条无法加入物理特性。
想了好久才,看了大神的文章,才明白了。一根绳子可以是很多刚体连在一起,刚体之间用关节连在一起,如下图所示
所以代码中要设置成:
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
这句话原本是在调试模式下显示所有的刚体和关节,碰撞,一般游戏做好之后是要删除的。但是我们这个绳子的制作就不能删除这句话了,不然什么都看不见。
但是我们不想看到红色的刚体,只留下关节。所以要设置成:
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_JOINT);
但是你会发现绳子上一节有一个圆点,这个圆点怎么删除呢。想了半天,去看源代码吧。
在PhysicsDebugDraw类中,drawJoint函数就是绘制关节的,以下是这个函数的源代码的一部分
void PhysicsDebugDraw::drawJoint(PhysicsJoint& joint)
{
const Color4F lineColor(0.0f, 0.0f, 1.0f, 1.0f); //绘制关节线条的颜色
const Color4F jointPointColor(0.0f, 1.0f, 0.0f, 1.0f);//绘制关节点的颜色
我们可以看到线条是蓝颜色,关节点是绿颜色,我们要不显示节点,所以节点颜色要和线条一样
const Color4F jointPointColor(0.0f, 0.0f, 1.0f, 1.0f)
真正绘制线条的语句是
_drawNode->drawSegment(PhysicsHelper::cpv2point(a), PhysicsHelper::cpv2point(b), 3, lineColor);
真正绘制节点的语句是
_drawNode->drawDot(PhysicsHelper::cpv2point(a), 2, jointPointColor);
}
这个函数中所有的绘制节点的语句_drawNode->drawDot,我们都要屏蔽掉,这样子就看不到节点的绘制了
简单的来说源代码中要修的就是两点,一个修改节点颜色,一个是屏蔽掉节点的绘制语句。
改完之后就是下面这个样子:
有点绳子的样子了吧,不过有点锯齿状啊,将线条绘制语句中半径设置小点,默认是3,改成1,会好点。
再下来就是选择何种关节类型了,3.x physics中给出了11种关节类型
最后我选择了PhysicsJointDistance,其中PhysicsJointLimit晃动性太大了,满足不了,PhysicsJointSpring是弹簧类型,满足不了。下面是运行的一个图片
触摸检测和碰撞检测了,没什么好说的,代码写的很乱,大家多多包涵啊,我已上传到了http://download.csdn.net/detail/fanzhang1990/8241783
相关文章推荐
- cocos2dx3.X项目重写(二)新的物理引擎
- Cocos2dx 学习笔记 -TMX和物理引擎的结合
- 最全的iOS物理引擎demo
- CocosCreator物理引擎Box2D的Demo示例physics-example介绍
- cocos2dx physics物理引擎碰撞详解
- 纯Java开发的游戏引擎V0.5--DEMO2 -- 物理引擎
- 物理引擎demo (4) —— 力、关节和马达
- cocos2dx 3.0 物理引擎概述
- cocos2dx-3.0 中的关于物理引擎Box2D与chipmunk
- cocos2dx-3.x物理引擎Box2D介绍
- cocos2dx3.2 物理引擎之碰撞
- cocos2dx-3.x 修改默认物理引擎为Box2D
- cocos2dx物理引擎和碰撞检测(五)框架Fixtures
- Alternativa3D demo系列 -- 渲染+物理引擎测试
- cocos2dx 3.x 物理引擎接触检测掩码、碰撞掩码和类别掩码问题解析
- 结合物理引擎的cocos2dx游戏(保卫果树)
- 纯Java开发的游戏引擎V0.4--DEMO2 -- 物理引擎
- cocos2dx 3.0 物理引擎概述
- cocos2dx 3.1.1官方demo阅读-AccelerometerTest【加速度传感器】
- Cocos2d-x 3.1.1 学习日志13--物理引擎登峰造极之路