在认识Nape空间里,看我们了解了这个2D物理引擎,并学习了如何创建一个基本的Nape应用,今天我们来学习一下如何创建一些简单的Nape刚体。

运动与静止的刚体

和Box2D一样,Nape中的也分为静止和运动刚体,对应静止的刚体将不进行物理运动模拟,这样可以节省CPU的开支。我们可以通过刚体的type属性设置刚体的类型,这个属性值可以是DYNAMIC、STATIC或KINEMATIC,分别表示运动的、静止的和不受力作用但可以运动的静态刚体。

1
var body:Body = new Body(BodyType.DYNAMIC,new Vec2(bx,by));

设置刚体的形状

Nape刚体的形状是通过body.shape属性来设置的,和Box2D不一样,这个shape属性是一个shapeList类对象,也就是说,我们无法直接给shape属性赋值,而是要通过body.shape.addShape()方法来添加刚体形状。

addShape()方法有一个Shape类型的参数,实际上我们通常都是使用Shape类的子类Circle和Polygon来设置刚体的形状,Shape类只有两个子类,但不代码刚体就只有两个形状。具体说明如下:

Circle类

Circle用来创建一个圆形对象。构造函数和相应的参数说明如下:

1
2
3
4
5
6

function Circle(
radius:Float,
localCOM:Vec2,
material:Material,
filter:InteractionFilter
)

  • radius:圆形的半径,以像素为单位
  • localCOM:圆形的重心,即质量的中心,默认为(0,0)
  • material:圆形的材质,比如弹性、摩擦系数等,都通过material属性设置,相当于Box2D里的b2FixtureDef,默认为null。以后我会再详细介绍material的用方法
  • filter:设置刚体的碰撞分组,相当于Box2D中的FilterData

Polygon类

Polygon类会根据制定的一组顶点,来创建一个多边形对象。顶点的个数和坐标不同,就可以创建多各种各样的形状。它的构造函数和参数说明如下:

1
2
3
4
5

public function Polygon (
localVerts:*,
material:Material = null,
filter:InteractionFilter = null
);

  • localVerts:表示一个保存了多边形顶点的数组。Polygon中有一些静态方法,如box(),可以帮我们返回一些简单的顶点数组,Polygon.box()也是我们创建矩形刚体常用的方法。
  • material:多边形的材质,比如弹性、摩擦系数等,都通过material属性设置,相当于Box2D里的b2FixtureDef,默认为null
  • filter:设置刚体的碰撞分组,相当于Box2D中的FilterData

总的来看,Nape刚体的创建过程要比Box2D简单一些,至少不用创建一大堆的b2Shape,b2FixtureDef,b2Fixture,b2BodyDef和b2Body对象,这么多对象,看着都头疼。所以Nape还是很值得学习的哦!

言归正传,认识了Circle和Polygon类之后,我们就可以创建简单的圆形和矩形刚体了(复杂的多边形Nape刚体,稍候我会陆续讲解)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

//创建圆形的Nape刚体
private function createCircle(posX:Number, posY:Number, radius:int, type:BodyType):void
{
//创建刚体,Body有两个参数,一个是指刚体的类型,一个是指刚体的坐标
var circle:Body = new Body(type, new Vec2(posX, posY));
//创建刚体形状,刚体形状类型有两种:Circle或Polygon,但不代表刚体形状只有两种,Polygon类可以创建出各种形状的多边形刚体形状
//第二个参数的Material对象,我只传入了一个参数,表示刚体的弹性系数,后续我会专门介绍material类。
var shape:Circle = new Circle(radius, null, new Material(1));
//刚体的shapes是一个ShapeList类型的对象,不能直接将Shape对象复制给它,要通过push,将形状添加到ShapeList中去
circle.shapes.push(shape);
//设置刚体的空间
circle.space=space;
}
//创建矩形的Nape刚体
private function createBox(posX:Number,posY:Number,width:Number,height:Number,type:BodyType, angle:Number=0):Body{
//创建刚体,Body有两个参数,一个是指刚体的类型,一个是指刚体的坐标
var box:Body = new Body(type, new Vec2(posX, posY));
//创建刚体形状,刚体形状类型有两种:Circle或Polygon,但不代表刚体形状只有两种,Polygon类可以创建出各种形状的多边形刚体形状
//Polygon.box()方法会返回一个保存了指定宽高的矩形4个顶点的数组,然后将这个数组传入到Polygon的第一个参数中,矩形就创建好了
var shape:Polygon = new Polygon(Polygon.box(width, height));
//创建一定的角度,单位是弧度
shape.rotate(angle);
//刚体的shapes是一个ShapeList类型的对象,不能直接将Shape对象复制给它,要通过push,将形状添加到ShapeList中去
box.shapes.push(shape);
//设置刚体的空间
box.space=space;
return box;
}

转载于:https://www.cnblogs.com/snowgirl/p/8108456.html

创建简单的Nape刚体相关推荐

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

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

  2. Linux下安装Weblogic10.3.6并创建简单集群测试

    Linux下安装Weblogic10.3.6并创建简单集群进行测试 一.卸载随系统安装的openjdk 1.先查看安装的jdk信息,常用命令有rpm -qa | grep java, rpm -qa  ...

  3. python编程例子 输入 输出-推荐 :手把手教你用Python创建简单的神经网络(附代码)...

    原标题:推荐 :手把手教你用Python创建简单的神经网络(附代码) 作者:Michael J.Garbade:翻译:陈之炎:校对:丁楠雅 本文共2000字,9分钟. 本文将为你演示如何创建一个神经网 ...

  4. django初探-创建简单的博客系统(一)

    django第一步 1. django安装 pip install django print(django.get_version()) 查看django版本 2. 创建项目 打开cmd,进入指定目录 ...

  5. Maven一:maven的下载和环境安装以及创建简单的Maven项目

    1.Maven的下载 地址:https://maven.apache.org/download.cgi 2.将下载下来的文件解压到某个目录,如:C:\soft\Maven\apache-maven-3 ...

  6. ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真

    ROS探索总结(四)--简单的机器人仿真 前边我们已经介绍了ROS的基本情况,以及新手入门ROS的初级教程,现在就要真正的使用ROS进入机器人世界了.接下来我们涉及到的很多例程都是<ROS by ...

  7. dingo php,用laravel dingo/api创建简单的api

    这篇文章主要介绍了关于用laravel dingo/api创建简单的api,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 1,修改.env配置文件添加API_STANDARDS_TRE ...

  8. Eclipse中spring boot的安装和创建简单的Web应用

    1.添加STS插件 方法一 1.Help -> Eclipse Marketplace- 2.选择"Popular"标签去查找Spring Tool Suite (STS) ...

  9. 在Windows Server 2008上创建 简单卷

    简单卷 一个简单卷就是驻留在一个动态磁盘上的单一的卷.简单卷是物理磁盘的一部分,但它工作时就好像是物理上的一个独立单元.我们可以从动态磁盘的未分配空间来创建简单卷,但当只有一个动态磁盘时,简单卷是我们 ...

最新文章

  1. pandas使用sum函数计算dataframe单数据列的加和或者对所有的数据列进行求和(sum column or all columns of dataframe)
  2. windows开启ssh当跳板机
  3. 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏
  4. 微信小程序 封装接口
  5. NetCore2.0Web应用之Startup
  6. 长连接和Keepalive详解
  7. 前端学习(1775):前端调试之session storage原理和查看
  8. 一个简单的Kafka Flink Rabbitmq Demo
  9. Goodfellow“死磕”NIPS:这名字涉及色情和仇日
  10. html的canvas代码,HTML
  11. STM8L IAP升级过程记录
  12. JavaWeb学习—思维导图
  13. 控制工程中的数学建模(2)——二阶有源低通滤波器(之二)
  14. Ubuntu(Linux) 磁盘分区方案
  15. Presto error executing query
  16. MIPS架构对比ARM架构
  17. 古诗词-飞火在线工具
  18. Dreamweaver CS4 快捷键大全
  19. Galois Field NTT
  20. 关于 Java 的线程状态

热门文章

  1. CIO40: 2020年IT人员如何借机破局
  2. VS2017配置PCL1.9(win10环境)
  3. java 隐藏父类方法,java 子类继承父类成员变量的隐藏、实现方法的重写
  4. 如何用sql语句查询年龄最小或最大的信息
  5. ROS加强精通过程--禁止 未授权用户上网
  6. CDH集群搭建(CDH 6.0.1)
  7. 服务器芯片市场容量,未来内存接口芯片市场规模 使用内存接口芯片的服务器内存模组主要有寄存内存模组(RDIMM)和减载内存模组(LRDIMM)两种。RDIMM需要一颗寄... - 雪球...
  8. 男生必须给女友纠正的小习惯
  9. 网站被百度提示安全风险拦截后如何快速申请解封
  10. vep加密视频破解转换翻录为mp4教程