当前位置: 首页>编程笔记>正文

Nape刚体body.align();

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有两个布尔属性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

https://www.nshth.com/bcbj/633.html
>

相关文章:

  • 編程語言難度排名,8 月最新編程語言排行榜
  • 手機usb調試被禁用怎么恢復,解決安卓手機USB接口被外設占用導致無法調試的問題
  • 手機上的安卓模擬器,連接手機模擬器
  • 搜狗輸入法怎么手寫和拼音一起輸入,零彝輸入法用戶協議
  • ubuntu自帶gcc編譯器嗎,安裝ubuntu20.04(安裝vim、gcc、VMtools、中文輸入法、漢化、修改IP、無法連網問題)
  • 輸入法哪個最好用,android ip格式化輸入法,Android設置默認輸入法
  • blkmov指令使用例子,ORB-SLAM2代碼解析
  • windows補丁kb3033929怎么安裝,Win8.1 kb2919355安裝不上怎么辦?
  • 淘寶店鋪如何增加流量,淘寶賣家開店怎么做有效減少淘寶垃圾流量
  • 商標使用必須加TM或R嗎,商標中R標和TM標的區別
  • 沒有商標可以上速賣通嘛,速賣通商標授權怎么弄?速賣通官方授權模板書分享
  • 商標中R跟C分別代表什么,商標TM和R有什么區別
  • 商標中R跟C分別代表什么,CSDN Markdown 商標標志 C、TM、R
  • 有關向量的重要結論,專題-句向量(Sentence Embedding)
  • 信息安全等級保護的5個級別,信息安全等級保護措施之網絡安全技術
  • 書是黃金屋下一句是什么,書中的“黃金屋”
  • gps定位,定位iowait問題
  • 渲染軟件哪個好用,Android平臺上基于OpenGl渲染yuv視頻
  • C# wpf 通過HwndHost渲染視頻
  • h5商城源碼,H5全新紅包直通車網站源碼 包含多款游戲已對接支付
  • android基礎面試題及答案,安卓手機系統開發教程!BTAJ面試有關散列(哈希)表的面試題詳解,大廠直通車!
  • 中交第一公路勘察設計研究院,緯地道路縱斷面設計教程_直通車 | 中交一公局公路勘察設計院有限公司招聘公告...
  • arduino怎么把程序傳到板上,STM32替換Arduino直通車
  • 記錄2015年年初跳槽的經歷!
  • 什么情況下可以跳槽,記錄 2015 年年初跳槽的經歷!
  • 聚合支付公司前十,聚合支付行業的2019年終總結大會!細品,你細品~
  • mastercam后處理論壇,mastercam2017后處理升級_如何升級Mastercam 9.1版后處理?
  • 動態表情包制作,android 視頻轉表情,視頻怎么轉gif?好用軟件分享,自己也能制作出搞笑表情包...
  • pc頁面怎么打開,頁面的版心html,關于PC端網頁版心及網頁自適應問題
  • webp圖片怎樣改成jpg,如何給圖片更改格式?jpg轉webp怎么操作