(转载http://tomyail.com/blog/1065)

Body的类型:

  • BodyType.DYNAMIC(默认):用来模拟现实世界的刚体,拥有质量并且一旦加入Nape的空间(Space)里便会自动受到各种力的作用
  • BodyType.STATIC:不受各种力的作用(设置其force属性会报错)
  • BodyType.KINEMATIC:特征和静态刚体(STATIC Body)一样,但是可以设置其velocity属性来改变速度

Body不是简单的质点,所有的Body都是有形状和体积的,默认情况下都会进行碰撞检测.

Shape:

Body的shapes的属性用来维护其所对应的形状列表,都是Shape类型.

Nape里面的Shape类型用来定义物体的物理形状,Shape类有两个子类:Circle(圆形)和Polygon(多边形).

Shape类的Material用来设置物体的物理属性比如密度,弹力,最大静摩擦力等等.

官方文档首页 UML图比较清楚的阐明了这几个类之间的关系.

刚体的两个”心”:

刚体有两个心,重心和局部坐标系原点.需要注意的是刚体总是按照其局部坐标系的原点进行旋转的,而重心都是位于刚体的形状中心的.如果刚体的局部坐标原点和其重心不重合就会产生力矩,在刚体自由落体时就会发生旋转.

Nape的Debug有两个布尔属性drawBodyDetaildrawShapeDetail

drawBodyDetail表示是否绘制坐标原点,用实心方块表示.

drawShapeDetail表示是否绘制重心,用空心方块表示.

如下图:

Polygon有两个静态方法box和rect,两者的区别就是刚体两个心的位置

  • 利用box方法创建的shape重心和坐标原点都在方块的中央
  • 利用rect方法创建的shape原点在左上角,重心在形状的中心,所以下落时会绕原点进行旋转

例子

(1):利用box函数创建刚体测试

body = new Body(BodyType.KINEMATIC);
shape = new Polygon(Polygon.box(100, 100));
body.shapes.add(shape);
body.position.y = 100;
body.position.x = 100;//强制刷新
space.step(1/60);
trace(shape.localCOM);//输出(0,0)
trace(body.position);//输出(100,100)

运行截图:

利用box创建的刚体重心和原点都在方块的中点

(2):利用rect函数创建刚体测试

body = new Body(BodyType.KINEMATIC);
shape = new Polygon(Polygon.rect(0,0,100, 100));
body.shapes.add(shape);
body.position.y = 100;
body.position.x = 100;
space.bodies.add(body);//强制刷新
space.step(1/60);
trace(shape.localCOM);//输出(50,50)
trace(body.position);//输出(100,100)

运行截图:

利用rect创建的刚体重心原点在(100,100)的位置,也就是左上角.重心在(150,150)的位置,也就是刚体的形状中心.

修改重心localCOM(local Center of Mass)的坐标参考系是相对于其局部坐标,也就是这里local的含义吧,重心是相对于局部坐标系的偏移.

(3)测试algin()的作用

body = new Body(BodyType.KINEMATIC);
shape = new Polygon(Polygon.rect(0,0,100, 100));
body.shapes.add(shape);
body.position.y = 100;
body.position.x = 100;
space.bodies.add(body);body.align();
//强制刷新
space.step(1/60);
trace(shape.localCOM);//输出(0,0)
trace(body.position);//输出(150,150)

运行截图:

Body.align()的作用是将Body坐标系原点移动到Body重心点上去.

所以align会改变刚体的坐标位置.如上图所示,本来我设置的坐标点是(100,100),align之后的坐标点跑到了(150,150)上

一个例子:

override protected function initNapeSpace():void{super.initNapeSpace();//不绘制Body//debug.drawBodies = false;//不绘制Shape旋转标识//debug.drawShapeAngleIndicators = false;//绘制重心 空心方块debug.drawShapeDetail = true;//绘制坐标系原点 实心方形debug.drawBodyDetail = true;super.createBorder(false);var rect:Body = createRectBody(BodyType.DYNAMIC, 300, 300, -100, -100, 50, 200);var r2:Polygon = new Polygon(Polygon.rect(100, -100, 50, 200));r2.body = rect;var btn:PushButton = new PushButton(this, 450, 100, "rect.align()", function():void {rect.align(); btn.enabled = false; } )trace(rect.position)trace(rect.localCOM)}

转载于:https://www.cnblogs.com/ddw1997/p/3169507.html

Nape刚体body.align();相关推荐

  1. 创建简单的Nape刚体

    在认识Nape空间里,看我们了解了这个2D物理引擎,并学习了如何创建一个基本的Nape应用,今天我们来学习一下如何创建一些简单的Nape刚体. 运动与静止的刚体 和Box2D一样,Nape中的也分为静 ...

  2. 【Nape教程】Nape刚体碰撞检测

    Nape帮我们实现了物理碰撞模拟,通过Nape我们可以实现各种游戏模型.但是就像我在 Box2D碰撞检测 里讲的一样,只是碰撞是不够的,我还喜欢碰撞后的物体可以消失.变小等等,按照游戏需求执行任何需要 ...

  3. 【Nape教程】认识Nape空间

    Nape是除Box2D之外的又一个2D物理模拟引擎,有 Luca Deltodesco 用 Haxe语言 编写的.Nape引擎还提供了AS3版的SWC库,供Flash开发使用,这也是本次教程要讲的重点 ...

  4. 了解Nape 2d物理引擎 第一天

    首先 谢谢拉登大叔 预览效果 AS3代码 package {import flash.display.Sprite;import flash.events.Event;import flash.eve ...

  5. Nape 不动刚体的碰撞交互

    "不动"刚体,这里指的是以下两类刚体: 1.刚体的allowMovement和allowRotation都设false的刚体 2.KINEMATIC类型的刚体 如下代码,测试发现输 ...

  6. nape.geom.MarchingSquares

    Nape中的MarchingSquares类很简单,只有一个静态函数run,不过这对绘制那些简单的形状来说,已经足够了(当然MarchingSquares能做的不只这些).下面是这个run方法的结构: ...

  7. Oracle中joint,Nape中的LineJoint-线段关节

    今天要学习的内容时LineJoint线段关节,通过线段关节,我们可以限制刚体在某个指定的方向上来回移动.就像算珠只能在算盘的轴上移动一样. 老规矩,我们先来看一下LineJoint的构造函数: pub ...

  8. Nape 碰撞检测事件 笔记

    Nape事件侦听器 Listener是Nape中碰撞事件帧听的核心部分.所有的事件派发后都有Listener对象侦听,然后触发相应的事件处理函数. 包含四个类型:BodyListener. Const ...

  9. Nape的回调系统 nape.callbacks

    在Nape中增加一个回调大致分为三步 1:定义一些标签,并根据需求为不同的Interactor打上不同的标签 2:定义一个监听器,这个监听器定义了哪些标签触发了哪种行为之后做何种回调 3:为Space ...

最新文章

  1. Smart Card知识
  2. python-01实现考勤表添加与删除
  3. FPGA管脚分配需要考虑的因数
  4. C++判断字符串中是否有中文
  5. 001/Docker入门(Mooc)
  6. 「 Modbus-RTU报文解析」解析03、06、10功能码报文示例
  7. python深度学习环境支撑列表 各版本对应关系,Keras,TensorFlow,pytorch ,caffe等。
  8. 大剑无锋之HashMap全考点
  9. linux之/usr/local/bin和/usr/bin区别
  10. 如何把word分装到两个byte_如何核对两个Word文档的内容差别?同事加班半小时,我只花了30秒...
  11. 老男孩python分享视频
  12. python的datetime.strptime_Python strptime()和时区?
  13. 关于Jmeter压力测试
  14. Java目前主流框架
  15. [Factory mode] 怎么配置工厂模式测试项
  16. shopnc mysql_shopnc配置
  17. RabbitMQ实现订单30分钟超时自动关闭
  18. 51单片机入门——动态数码管显示详解
  19. 《Dreamweaver CS6 完全自学教程》笔记 第十七章:Spry 框架技术
  20. Chrome 谷歌浏览器下载网页中的背景图、图标等

热门文章

  1. jquery input标签中 中checkbox全部选中与全部取消
  2. 如果有10个词,我想从中取3个词,然后把所有的10选3的可能统计记录下来,该怎么做?...
  3. 手机电脑都能用,将照片转成PDF的免费方法
  4. AI安全领域的“雨山机车大赛”,改变了什么?
  5. mysql日期函数之DATEDIFF() if()用法 case when用法
  6. 【问题解决】安装Oracle数据库,中途提示未找不到文件的解决办法(附带图文)
  7. pytorch无坑超详细图文CPU版小白安装教程(配gpu版链接、conda命令教程)
  8. 由左右相机图像点重建三维点
  9. 裁剪图像的黑边(图像拼接后的黑边去除)
  10. eclipse如何配置工作环境