cocos2dx 3.1.1物理引擎做个晃绳子的小demo

前端之家收集整理的这篇文章主要介绍了cocos2dx 3.1.1物理引擎做个晃绳子的小demo前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


@H_404_6@这几天都在学习cc3.x的物理引擎,自从3.x版本之后,cc就把两大引擎Box2d和chipmunk封装起来了啊,用起来方便多了,对于我这个对物理引擎从没了解的人也上手起来了啊。物理引擎对于在什么跑酷之类的游戏中还是作用蛮大的啊,碰撞还是在所难免的。对于物理引擎中的各种基本概念,比如物理边界,重力加度,关节等等,网上一大堆资料,我就不罗嗦了。cc3.x默认用的是chipmunk,你也可以改用Box2d。@H_404_6@

@H_404_6@以前我遇到一个大神用html5做了一个简单的晃绳子的小demo.链接是http://www.html5cn.org/article-5149-1.html。@H_404_6@

@H_404_6@这个游戏是模仿一个小人抓在一条绳子上,然后你开始用鼠标按住屏幕,然后左右来回动,小人也跟着来回晃动,有没有一点真实的赶脚啊,松开鼠标之后人就被抛出去了。然后计算人抛出去的距离,计算你的排名。大神用了2,3个小时就搞定了。对于我这个菜鸟,用了2,3天才琢磨出来。虽然耗费了更多的时间,但是也学到了东西,我想这就是成长吧。@H_404_6@

@H_404_6@这个demo中没多少代码,但是就是模仿绳子来回晃的样子要花时间。一下是一个样子图片:@H_404_6@

@H_404_6@@H_404_6@


1.绳子的绘制@H_404_6@

首先说明绳子必须要有物理特性,不能是一根全是直的,要在外力的作用下能模仿实际的弯曲现象,所以你用图片,做成动画Animation就明显不行了。用drawNode画线条呢,也不行,因为线条无法加入物理特性。@H_404_6@

想了好久才,看了大神的文章,才明白了。一根绳子可以是很多刚体连在一起,刚体之间用关节连在一起,如下图所示@H_404_6@

@H_404_6@

所以代码中要设置成:@H_404_6@

scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);@H_404_6@

@H_404_6@这句话原本是在调试模式下显示所有的刚体和关节,碰撞,一般游戏做好之后是要删除的。但是我们这个绳子的制作就不能删除这句话了,不然什么都看不见。@H_404_6@

但是我们不想看到红色的刚体,只留下关节。所以要设置成:@H_404_6@

scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_JOINT);@H_404_6@

但是你会发现绳子上一节有一个圆点,这个圆点怎么删除呢。想了半天,去看源代码吧。@H_404_6@

在PhysicsDebugDraw类中,drawJoint函数就是绘制关节的,以下是这个函数的源代码的一部分@H_404_6@

@H_404_6@void PhysicsDebugDraw::drawJoint(PhysicsJoint& joint)@H_404_6@

{ @H_404_6@

const Color4F lineColor(0.0f,0.0f,1.0f,1.0f); //绘制关节线条的颜色
const Color4F jointPointColor(0.0f,1.0f);//绘制关节点的颜色@H_404_6@

@H_404_6@我们可以看到线条是蓝颜色,关节点是绿颜色,我们要不显示节点,所以节点颜色要和线条一样@H_404_6@

const Color4F jointPointColor(@H_404_6@0.0f,1.0f@H_404_6@@H_404_6@)@H_404_6@@H_404_6@@H_404_6@

真正绘制线条的语句是@H_404_6@

_drawNode->drawSegment(PhysicsHelper::cpv2point(a),PhysicsHelper::cpv2point(b),3,lineColor);@H_404_6@

真正绘制节点的语句是@H_404_6@

_drawNode->drawDot(PhysicsHelper::cpv2point(a),2,jointPointColor);@H_404_6@

}@H_404_6@

@H_404_6@

@H_404_6@这个函数中所有的绘制节点的语句_drawNode->drawDot,我们都要屏蔽掉,这样子就看不到节点的绘制了@H_404_6@

简单的来说源代码中要修的就是两点,一个修改节点颜色,一个是屏蔽掉节点的绘制语句。@H_404_6@

改完之后就是下面这个样子:@H_404_6@

@H_404_6@

有点绳子的样子了吧,不过有点锯齿状啊,将线条绘制语句中半径设置小点,默认是3,改成1,会好点。@H_404_6@


@H_404_6@

再下来就是选择何种关节类型了,3.x physics中给出了11种关节类型@H_404_6@

最后我选择了PhysicsJointDistance,其中PhysicsJointLimit晃动性太大了,满足不了,PhysicsJointSpring是弹簧类型,满足不了。下面是运行的一个图片@H_404_6@

@H_404_6@

触摸检测和碰撞检测了,没什么好说的,代码写的很乱,大家多多包涵啊,我已上传到了http://download.csdn.net/detail/fanzhang1990/8241783@H_404_6@

猜你在找的Cocos2d-x相关文章