android游戏引擎andengine学习系列六:Physics物理碰撞效果理解

 

看到exmaples中的例子:CollisionDetectionExample,看到效果图如下:

 

其实这个例子跟我们前面的绘制虚拟游戏摇杆很像,不同的就是中间有两个sprite,判断碰撞的关键语句如下:


另外mCamera.isRectangularShapeVisible(face)判断face是否超出摄像机的视界。

 

 

Physics中的例子都是模仿现实世界中的重力还有碰壁的反弹等物理效果,看下代表性的例子:PhysicsExample

效果如下:

 

实现了IAccelerometerListener重力加速度、IOnSceneTouchListener触屏事件等接口

实现物理效果的步骤如下:

1、创建物理世界

 

2、创建墙壁并加载到scene中


3、PhysicsWorld实例用scene.registerUpdateHandler注册到场景


4、当上面的物理世界创建好了以后,在外部实现IOnSceneTouchListener接口的方法,一触屏便生出一个sprite。


以上几步完成之后便可以完成整个的物理世界的碰撞效果了。

 

备注1:该例子中有四种不同的sprite碰撞墙壁,关键语句如下:


关于第一种和第二种没什么多说的,和上面创建墙壁的差不多的语法。第三种和第四种创建三角形和六边形的有点复杂,需要计算,看如下原理:
先看三角形的精灵的画法,可以先根据三角形sprite得到该sprite的宽和高,当然这里是把他的宽高去一般,为了方便计算,于是可以得到坐标:

      A(0,-H),  B(-W,H),  C(W,H),

这里是根据android的坐标系统来定的。得到了坐标值,于是可以确定Vector2类,关键便是的到这里的vertor2.

再来看看正六边形的原理:

同样的我们可以得到W和H,根据数学知识得到BG的长度为:0.5*H,至于具体如何算,可以请教中学的数学老师,于是我们可以得到坐标:

    A(0,-H),  B(W,-0.5H),  C(W,0.5H),  D(0,H),  E(-W,0,.5H),  F(-W,-0.5H);

好了,我们坐标都得到了,可以定义我们的Vertor2的数组:

三角形也是一样的,有了vertices,我们便可以得到物理世界的不一样形状的sprite


具体的创造六边形的方法:


这里面有一点开始我怎么也想不通,就是定义坐标的时候,左右为什么要加减2.5,上下为什么要加减8.25,后来看了图片才知道,纹理png图上的图案并没有全部填满整个纹理png图,上下左右都有一些边距,如下:

改图是被我放大的效果,为了方便大家看得更清楚,看到这里便一下子明白了上面那个问题,至于具体的数字为什么是那么多,肯定是跟像素有关系,有兴趣的同学可以找到这个图片,然后把它放大后慢慢的去数,就会明白啦!

posted on 2012-02-23 16:17  duancanmeng  阅读(374)  评论(0编辑  收藏  举报

导航