Nape刚体body.align();
(转载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有两个布尔属性drawBodyDetail和drawShapeDetail
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();相关推荐
- 创建简单的Nape刚体
在认识Nape空间里,看我们了解了这个2D物理引擎,并学习了如何创建一个基本的Nape应用,今天我们来学习一下如何创建一些简单的Nape刚体. 运动与静止的刚体 和Box2D一样,Nape中的也分为静 ...
- 【Nape教程】Nape刚体碰撞检测
Nape帮我们实现了物理碰撞模拟,通过Nape我们可以实现各种游戏模型.但是就像我在 Box2D碰撞检测 里讲的一样,只是碰撞是不够的,我还喜欢碰撞后的物体可以消失.变小等等,按照游戏需求执行任何需要 ...
- 【Nape教程】认识Nape空间
Nape是除Box2D之外的又一个2D物理模拟引擎,有 Luca Deltodesco 用 Haxe语言 编写的.Nape引擎还提供了AS3版的SWC库,供Flash开发使用,这也是本次教程要讲的重点 ...
- 了解Nape 2d物理引擎 第一天
首先 谢谢拉登大叔 预览效果 AS3代码 package {import flash.display.Sprite;import flash.events.Event;import flash.eve ...
- Nape 不动刚体的碰撞交互
"不动"刚体,这里指的是以下两类刚体: 1.刚体的allowMovement和allowRotation都设false的刚体 2.KINEMATIC类型的刚体 如下代码,测试发现输 ...
- nape.geom.MarchingSquares
Nape中的MarchingSquares类很简单,只有一个静态函数run,不过这对绘制那些简单的形状来说,已经足够了(当然MarchingSquares能做的不只这些).下面是这个run方法的结构: ...
- Oracle中joint,Nape中的LineJoint-线段关节
今天要学习的内容时LineJoint线段关节,通过线段关节,我们可以限制刚体在某个指定的方向上来回移动.就像算珠只能在算盘的轴上移动一样. 老规矩,我们先来看一下LineJoint的构造函数: pub ...
- Nape 碰撞检测事件 笔记
Nape事件侦听器 Listener是Nape中碰撞事件帧听的核心部分.所有的事件派发后都有Listener对象侦听,然后触发相应的事件处理函数. 包含四个类型:BodyListener. Const ...
- Nape的回调系统 nape.callbacks
在Nape中增加一个回调大致分为三步 1:定义一些标签,并根据需求为不同的Interactor打上不同的标签 2:定义一个监听器,这个监听器定义了哪些标签触发了哪种行为之后做何种回调 3:为Space ...
最新文章
- Smart Card知识
- python-01实现考勤表添加与删除
- FPGA管脚分配需要考虑的因数
- C++判断字符串中是否有中文
- 001/Docker入门(Mooc)
- 「 Modbus-RTU报文解析」解析03、06、10功能码报文示例
- python深度学习环境支撑列表 各版本对应关系,Keras,TensorFlow,pytorch ,caffe等。
- 大剑无锋之HashMap全考点
- linux之/usr/local/bin和/usr/bin区别
- 如何把word分装到两个byte_如何核对两个Word文档的内容差别?同事加班半小时,我只花了30秒...
- 老男孩python分享视频
- python的datetime.strptime_Python strptime()和时区?
- 关于Jmeter压力测试
- Java目前主流框架
- [Factory mode] 怎么配置工厂模式测试项
- shopnc mysql_shopnc配置
- RabbitMQ实现订单30分钟超时自动关闭
- 51单片机入门——动态数码管显示详解
- 《Dreamweaver CS6 完全自学教程》笔记 第十七章:Spry 框架技术
- Chrome 谷歌浏览器下载网页中的背景图、图标等
热门文章
- jquery input标签中 中checkbox全部选中与全部取消
- 如果有10个词,我想从中取3个词,然后把所有的10选3的可能统计记录下来,该怎么做?...
- 手机电脑都能用,将照片转成PDF的免费方法
- AI安全领域的“雨山机车大赛”,改变了什么?
- mysql日期函数之DATEDIFF() if()用法 case when用法
- 【问题解决】安装Oracle数据库,中途提示未找不到文件的解决办法(附带图文)
- pytorch无坑超详细图文CPU版小白安装教程(配gpu版链接、conda命令教程)
- 由左右相机图像点重建三维点
- 裁剪图像的黑边(图像拼接后的黑边去除)
- eclipse如何配置工作环境