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

【Nape教程】认识Nape空间

【Nape教程】认识Nape空间

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.创建一个基本的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。
  //Nape空间模拟space.step(1 / 60, 30);


刚体的创建主要分为三个部分:

  • 创建一个Body对象,并指定它的类型和坐标。刚体的类型由BodyType中的常量指定,包括BodyType.STATIC、DYNAMIC和KINEMATIC三种类型;坐标是一个Vec2类型的变量。
  • 创建刚体的形状shape,可以接收的形状有两种Cirle和Polygon,后者通过指定不同的顶点来创建任何非圆形的形状。
  • 指定刚体所存在的空间,即第一部分提到的空间。
  • 举例说明如下:
       //        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()方法,分别清除视图、优化显示图像和绘制Nape空间。

    ShapeDebug使用方法举例说明如下:

       //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示例
    到这里,一个简单Nape示例所需的内容,我们就学完了,下面是一个简单的示例,点击鼠标创建一个矩形刚体

    package
    {import flash.display.Sprite;import flash.events.Event;import flash.events.MouseEvent;import nape.geom.Vec2;import nape.phys.*;import nape.shape.Polygon;import nape.space.Space;import nape.util.ShapeDebug;/*** ...* @author ladeng6666*/public class HelloNape extends Sprite{private var space:Space;private var debug:ShapeDebug;public function HelloNape(){//1.创建一个基本的Nape空间//声明空间重力var gravity:Vec2 = new Vec2(0, 400);space = new Space(gravity);//2.创建静态的Nape刚体//        a.创建一个Body对象,并指定它的类型和坐标var body:Body = new Body(BodyType.STATIC, new Vec2(stage.stageWidth/2, stage.stageHeight-10));//        b.创建刚体的形状shape,可以接收的形状有两种Cirle和Polygon,后者通过指定不同的顶点来创建任何非圆形的形状。var shape:Polygon = new Polygon(Polygon.box(stage.stageWidth, 10));body.shapes.add(shape);//        c.指定刚体所存在的空间,即第一部分提到的空间。body.space = space;//3.创建模拟视图debug = new ShapeDebug(400, 200);addChild(debug.display);//4.在ENTER_FRAME事件处理器中进行Nape模拟addEventListener(Event.ENTER_FRAME, loop);stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseEventHandler);}private function mouseEventHandler(e:MouseEvent):void{//        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;}private function loop(e:Event):void{//Nape空间模拟space.step(1 / 60, 30);//清除视图debug.clear();//优化显示图像debug.flush();//绘制空间debug.draw(space);}}}


     


    文章转自http://bbs.9ria.com/thread-169648-1-1.html

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

相关文章:

  • lucidshape中文教程
  • nanodrop使用方法
  • 怎样用ps做瓶子里的世界
  • obi fluid教程
  • 3shape教程
  • 空间面板模型
  • 空间分析
  • 3shape使用教程
  • pdf翻譯網站,1 Trillion Dollar Refund – How To Spoof PDF Signatures——欺騙PDF簽名
  • 如何創建一個抽象類,創建具體的產品,并繼承產品抽象類
  • 主從庫理論知識-主從同步如何實現?
  • Tomcat環境變量配置,Mybatis的配置文件參數詳解
  • I Am You,POJ 3130 How I Mathematician Wonder What You Are! 半平面交
  • 要學vue需要學什么基礎知識,第一章 Vue基礎入門
  • win7下安裝win10,win10下安裝Ubuntu18.10雙系統
  • vmplayer怎么使用烏邦圖,烏邦圖環境安裝
  • 計算機專業要不要考研——寫的很棒
  • redisson看門狗原理,記錄一次redis漏洞攻擊
  • 任意波形發生器,基于單片機信號波形發生器系統設計-畢設課設
  • 嵌入式驅動,嵌入式Linux驅動大全問世,十年磨一劍,視頻!服務!新老客戶都有大折扣!
  • socket連接器v2下載,Netty(一)基礎socketchannel,Buffer,selector黏包 半包解決 實戰
  • 大一c語言程序設計筆記,吉林大學2013級大一下學期程序設計作業:同學通訊錄系統
  • 暑期小學生計算機培訓班,青島小學生學習編程暑假
  • 熊貓毛小喵喵去哪里了,小西貝、何小喵看熊貓之觀察者設計模式
  • 如何用c語言比較兩個數的大小,如何用C語言求兩個數的較大值
  • 輾轉相除法求最小公倍數的方法,更相減損術--最大公約數
  • 輾轉相除法求最小公倍數的方法,如何求出兩個整數的最大公約數
  • 李新義的書畫藝術,中國現代書畫家——譚奇中、李義象、高俊鵬等
  • 海底撈張勇名言,致張勇先生一封信:海底撈的“七宗罪”!
  • WPF學習(12)動畫
  • ui自動化測試工具,移動端UI自動化之appium的使用(二)
  • 爬蟲網站,Search For Free —— 新聞爬蟲及爬取結果的查詢網站
  • tenda騰達無線設置,騰達F6路由器無線中繼功能設置
  • 斐波那契數列、小青蛙跳臺階
  • OJ每日一練——小青蛙上臺階
  • 小青蛙貝葉斯
  • 小青蛙走臺階問題
  • MySQL數據庫下載,NAVICAT FOR MYSQL存儲過程