Nape是除Box2D之外的又一个2D物理模拟引擎,有Luca Deltodesco用Haxe语言编写的。Nape引擎还提供了AS3版的SWC库,供Flash开发使用,这也是本次教程要讲的重点。点击下载Nape的AS3版SWC类库。
Nape不仅比Box2D运行速度要快,而且更节省内存,有更完善的回调系统、几何算法功能和在线文档(这些优势是官方介绍的,拉登大叔还没有亲测过)。
Nape的整体结构和思想跟Box2D是大体一致的,如果你没有学过Box2D,可以从认识Box2D世界开始,但这不是学习Nape必须的。如果你熟悉Box2D,恭喜你,有了Box2D的基础,掌握Nape只需要几分钟的时间。好了闲话少说,下面我详细了解一下,一个基本的Nape应用的创建过程。
一、Nape空间Space
Nape的Space类为整个Nape系统构建了一个模拟环境,就像我们生活的地球,是任何Nape应用所必须的也是核心的元素。
可以理解成Box2D中的b2World类
另外,既然是物理模拟引擎,肯定少不了重力。Nape中的重力用一个Vec2向量对象表示,所以创建一个Space空间的代码如下:
1
2
3
4
|
//1.创建一个基本的Nape空间
//声明空间重力
var gravity:Vec2 = new Vec2(0, 400);
space = new Space(gravity);
|
空间创建好后,好要进行模拟,这一点通过space.step()函数来实现。在Flash的ENTER_FRAME时间处理器重,调用space.step()方法,Nape引擎会自动计算进行物理模拟。
step()函数中有三个参数,它们 功能分别如下:
- deltatime:前后两次模拟计算间隔的时间,这个时间越短,碰撞检测越精确,不过模拟运行速度也越慢,通常为1/60。
- velocityIterations:碰撞过程中速度模拟计算的迭代次数,通常情况下这个数值超过10就能模拟真实的碰撞效果了。
- positionIterations:碰撞过程中物体坐标模拟计算的迭代次数,默认为10。
所以它的写法通常如下:
1
2
|
//Nape空间模拟
space.step(1 / 60, 30);
|
二、创建Nape刚体
空间有了,下面要在空间中添加一些对象,Nape中习惯性把这些对象叫做刚体body。刚体创建好并添加到space中后,Nape引擎会自动计算它的速度和坐标,进行物理运动、碰撞模拟。
这一点跟Box2D中的b2Body感念是一样的。
刚体的创建主要分为三个部分:
- 创建一个Body对象,并指定它的类型和坐标。刚体的类型由BodyType中的常量指定,包括BodyType.STATIC、DYNAMIC和KINEMATIC三种类型;坐标是一个Vec2类型的变量。
- 创建刚体的形状shape,可以接收的形状有两种Cirle和Polygon,后者通过指定不同的顶点来创建任何非圆形的形状。
- 指定刚体所存在的空间,即第一部分提到的空间。
举例说明如下:
1
2
3
4
5
6
7
|
// a.创建一个Body对象,并指定它的类型和坐标
var body:Body = new Body(BodyType.DYNAMIC, new Vec2(mouseX, mouseY));
// b.创建刚体的形状shape,可以接收的形状有两种Cirle和Polygon,后者通过指定不同的顶点来创建任何非圆形的形状。
var shape:Polygon = new Polygon(Polygon.box(Math.random()*30+30,Math.random()*30+30));
body.shapes.add(shape);
// c.指定刚体所存在的空间,即第一部分提到的空间。
body.space = space;
|
三、Nape模拟调试视图
空间和刚体创建好后,舞台上任然是什么都看不见的,因为刚体并不是可视对象。这时候我们需要创建一个ShapeDebug对象,这个ShapeDebug对象会遍历所有的刚体,并通过Flash绘图API把它们绘制到一个DisplayObject上,然后通过ShapeDebug.display获取这个DisplayObject,并添加到舞台上,即可看见所有的刚体对象。
可以理解成Box2D中的b2DebugDraw对象
ShapeDebug的构造函数中有三个参数,前两个表示DisplayObject的宽和高,第三个是刚体绘制的颜色,可以保存默认不变。
然后我们要分别调用ShapeDebug的clear()、flush()和draw()方法,分别清除视图、渲染调试视图(只在BitmapDebug下起作用)和绘制Nape空间。
ShapeDebug使用方法举例说明如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//3.创建模拟视图
debug = new ShapeDebug(400, 200);
addChild(debug.display);
private function loop(e:Event):void
{
//Nape空间模拟
space.step(1 / 60, 30);
//清除视图
debug.clear();
//优化显示图像
debug.flush();
//绘制空间
debug.draw(space);
}
|
Nape是除Box2D之外的又一个2D物理模拟引擎,有Luca Deltodesco用Haxe语言编写的。Nape引擎还提供了AS3版的SWC库,供Flash开发使用,这也是本次教程要讲的重点。点击下载Nape的AS3版SWC类库。
Nape不仅比Box2D运行速度要快,而且更节省内存,有更完善的回调系统、几何算法功能和在线文档(这些优势是官方介绍的,拉登大叔还没有亲测过)。
Nape的整体结构和思想跟Box2D是大体一致的,如果你没有学过Box2D,可以从认识Box2D世界开始,但这不是学习Nape必须的。如果你熟悉Box2D,恭喜你,有了Box2D的基础,掌握Nape只需要几分钟的时间。好了闲话少说,下面我详细了解一下,一个基本的Nape应用的创建过程。
一、Nape空间Space
Nape的Space类为整个Nape系统构建了一个模拟环境,就像我们生活的地球,是任何Nape应用所必须的也是核心的元素。
可以理解成Box2D中的b2World类
另外,既然是物理模拟引擎,肯定少不了重力。Nape中的重力用一个Vec2向量对象表示,所以创建一个Space空间的代码如下:
1
2
3
4
|
//1.创建一个基本的Nape空间
//声明空间重力
var gravity:Vec2 = new Vec2(0, 400);
space = new Space(gravity);
|
空间创建好后,好要进行模拟,这一点通过space.step()函数来实现。在Flash的ENTER_FRAME时间处理器重,调用space.step()方法,Nape引擎会自动计算进行物理模拟。
step()函数中有三个参数,它们 功能分别如下:
- deltatime:前后两次模拟计算间隔的时间,这个时间越短,碰撞检测越精确,不过模拟运行速度也越慢,通常为1/60。
- velocityIterations:碰撞过程中速度模拟计算的迭代次数,通常情况下这个数值超过10就能模拟真实的碰撞效果了。
- positionIterations:碰撞过程中物体坐标模拟计算的迭代次数,默认为10。
所以它的写法通常如下:
1
2
|
//Nape空间模拟
space.step(1 / 60, 30);
|
二、创建Nape刚体
空间有了,下面要在空间中添加一些对象,Nape中习惯性把这些对象叫做刚体body。刚体创建好并添加到space中后,Nape引擎会自动计算它的速度和坐标,进行物理运动、碰撞模拟。
这一点跟Box2D中的b2Body感念是一样的。
刚体的创建主要分为三个部分:
- 创建一个Body对象,并指定它的类型和坐标。刚体的类型由BodyType中的常量指定,包括BodyType.STATIC、DYNAMIC和KINEMATIC三种类型;坐标是一个Vec2类型的变量。
- 创建刚体的形状shape,可以接收的形状有两种Cirle和Polygon,后者通过指定不同的顶点来创建任何非圆形的形状。
- 指定刚体所存在的空间,即第一部分提到的空间。
举例说明如下:
1
2
3
4
5
6
7
|
// a.创建一个Body对象,并指定它的类型和坐标
var body:Body = new Body(BodyType.DYNAMIC, new Vec2(mouseX, mouseY));
// b.创建刚体的形状shape,可以接收的形状有两种Cirle和Polygon,后者通过指定不同的顶点来创建任何非圆形的形状。
var shape:Polygon = new Polygon(Polygon.box(Math.random()*30+30,Math.random()*30+30));
body.shapes.add(shape);
// c.指定刚体所存在的空间,即第一部分提到的空间。
body.space = space;
|
三、Nape模拟调试视图
空间和刚体创建好后,舞台上任然是什么都看不见的,因为刚体并不是可视对象。这时候我们需要创建一个ShapeDebug对象,这个ShapeDebug对象会遍历所有的刚体,并通过Flash绘图API把它们绘制到一个DisplayObject上,然后通过ShapeDebug.display获取这个DisplayObject,并添加到舞台上,即可看见所有的刚体对象。
可以理解成Box2D中的b2DebugDraw对象
ShapeDebug的构造函数中有三个参数,前两个表示DisplayObject的宽和高,第三个是刚体绘制的颜色,可以保存默认不变。
然后我们要分别调用ShapeDebug的clear()、flush()和draw()方法,分别清除视图、渲染调试视图(只在BitmapDebug下起作用)和绘制Nape空间。
ShapeDebug使用方法举例说明如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//3.创建模拟视图
debug = new ShapeDebug(400, 200);
addChild(debug.display);
private function loop(e:Event):void
{
//Nape空间模拟
space.step(1 / 60, 30);
//清除视图
debug.clear();
//优化显示图像
debug.flush();
//绘制空间
debug.draw(space);
}
|