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

 run(iso:IsoFunctionDef, bounds:AABB, cellsize:Vec2, quality:Int = 2, subgrid:Vec2 = null, combine:Bool = true, output:GeomPolyList = null):GeomPolyList

  • iso:IsoFunctionDef:这是run函数的核心部份,也是我们定义刚体形状的地方。在官方API中这个参数是IsoFunctionDef类型,不过这是针对Haxe语言的,针对Flash中这个iso是IsoFunction类型的。这里的IsoFunction并不是一个具体的类,而是接口。它的结构如下:

    interface IsoFunction{public iso(x:Number, y:Number):Number;
    }

    我们需要新建一个类,应用这个IsoFunction接口,在iso函数中编写刚体形状公式。然将这个类的实例化对象赋值给iso参数。iso的结果必须唯一,即给定x和y得到的值一定是同一个,符合数学里面函数的定义.iso函数还会返回一个Number值,这个返回值小于0,表示该点在形状内部,属于刚体一部份,大于0表示该点在形状外部,不在刚体范围内。

  • bounds:AABB:表示舞台中的某个区域,类似于AS3中的Rectangle类。这个区域和iso函数中遍历的区域相同
  • cellsize:Vec2:指定run方法在AABB区域遍历计算的间距,分解bounds区域的单元格尺寸,这个尺寸越小,iso函数仿真出来的形状越逼真,相应的CPU消耗也越大
  • quality:Int = 2:在单元格边缘应用递归进行插值运算的次数,当iso遍历的单元格尺寸较大时,可以通过增加整个值来提高边缘的精确度。
  • subgrid:Vec2 = null: 设置此参数后,bounds区域首先以subgrid的尺寸分割,然后分割后的单元格再以cellssize的尺寸进行分割。所以subgrid的尺寸一定要比cellsize的尺寸大。
  • combine:Bool = true: 当这个参数为true时,每个单元格里分割出来的多边形,会组合成一个大的多边形。
  • output:GeomPolyList = null:设置整个参数后,生成的GeomPolyList会自动添加到(通过GeomPolyList的add函数)output中,而不会新建一个GeomPolyList对象。得到这个GeomPolyList之后,根据我们学过的GeomPoly方法创建多边形。
import nape.geom.IsoFunction;
class SemiCircleIso implements IsoFunction{private var _px:Number,_py:Number,_r:Number;public function SemiCircleIso():void{}public function setUP(px:Number,py:Number,r:Number):void{_px = px;_py = py;_r = r;}public function iso(x:Number,y:Number):Number{var dis:Number,dx:Number,dy:Number;var isOK:Number;dx = x-_px;dy = y-_py;dis = dx*dx + dy*dy;//iso函数还会返回一个Number值,这个返回值小于0,表示该点在形状内部,属于刚体一部份,大于0表示该点在形状外部,不在刚体范围内if (dis< _r*_r){isOK=-1;}else{isOK=1;}return isOK;}
}

public function createMarchingSquareBody(e:MouseEvent=null) : void {myISO.setUP(275, 200, r);var geomList: GeomPolyList;geomList = MarchingSquares.run(myISO, aabb, cellsize,quality,null,combine);if(b !=null){b.space = null;}b = new Body(BodyType.DYNAMIC);geomList.foreach(function (s:*):void{b.shapes.push(new Polygon(s));});b.align();b.space = napeWorld;}}

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

nape.geom.MarchingSquares相关推荐

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

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

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

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

  3. Nape实现坐标旋转角度回弹

    乒乓球以一个向量运动,碰到障碍后反弹以一个新的向量运动,如下图: 要实现回弹只需要求出向量v1,把向量v0取反,再旋转(a+b)度就可以得到向量v1. 向量取反: var v:vec2 = new V ...

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

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

  5. ggplot2设置坐标轴范围_R可视化03|ggplot2图层-几何对象图层(geom layer)

    前面简单介绍ggplot2是基于图层图形语法(the Grammar of Graphics),一张完整图由不同图层叠加而成,本文介绍几何对象图层(geom layer),续前篇: R可视化01|gg ...

  6. java geom_java.awt.geom 类 Area - Java 中文参考手册

    java.lang.Object java.awt.geom.Area 所有已实现的接口:Shape, Cloneable public class Areaextends Objectimpleme ...

  7. VTK:模型之MarchingSquares

    VTK:模型之MarchingSquares VTK:模型之MarchingSquares 代码 MarchingSquares.cxx CMakeLists.txt VTK:模型之MarchingS ...

  8. layui数据可视化_空间数据可视化 GEOM

    1.arcgis api for python 自制点 featurelayer %matplotlib import matplotlib.pyplot as plt import numpy as ...

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

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

最新文章

  1. 一、JAVA通过JDBC连接mysql数据库(连接)
  2. vs 编译android so
  3. SQL Sever联接查询
  4. verilog 基础篇 signal_tap 的使用
  5. python通过pip安装包,提示 pip 不是内部或外部命令
  6. gridview 在已有数据的基础上添加数据_基于Python的数据分析-1.语法基础(上)
  7. 《Java编程艺术》目录
  8. 《零基础》MySQL LIKE 子句(十六)
  9. JMS学习九 ActiveMQ的消息持久化到Mysql数据库
  10. Linux学习笔记-Makefile中的变量及函数
  11. 如何在本地管理和切换多个 github 账号?
  12. EXTI外部中断触发:神舟IV
  13. 2021年PMP考试模拟题7(含答案解析)
  14. Java开发必备软件安装大全(建议学生党初学Java开发收藏)
  15. 计算机网络flash实训报告,flash动画实训总结精选 .doc
  16. JavaWeb之Servlet-注册页面
  17. 种草软文怎么写?分享一些超实用的种草软文写作技巧。
  18. USB billboard
  19. 中国石油大学(北京)-《石油加工工程》第一阶段在线作业
  20. (目标检测)①数据集的建立(拍摄收集、数据集标注)

热门文章

  1. 【教程】win10下安装Biolinux双系统
  2. 百度新闻爬虫搜索引擎实战---爬虫篇(2)
  3. 很多情侣看了后,晚上再不关机了!
  4. html页面导出文件大小,【实战】通过 JS 将 HTML 导出为 PDF 文档
  5. Mysql客户端navicat的使用并连接远程数据库【重点】
  6. nested exception is java.sql.SQLException: Data truncated for column 'PassWord' at row 72
  7. 媒体查询(Media Query)
  8. M手记-计算机基本硬件与组成
  9. PCA (主成分分析)详解 (写给初学者)
  10. 二分查找时间复杂度及其Python实现