在Nape中增加一个回调大致分为三步

1:定义一些标签,并根据需求为不同的Interactor打上不同的标签

2:定义一个监听器,这个监听器定义了哪些标签触发了哪种行为之后做何种回调

3:为Space注册对应的监听

Nape定义的四种Listener

一、BodyListener:针对单个刚体状态的监听器

new(event:CbEvent, options:Null<Dynamic>, handler:BodyCallback -> Void, precedence:Int = 0)

某物(options)在某时(event)干什么(handler);

这里的event只接受两种类型(如果用的是dev版本,传入非法event会有人性化的报错)

  • CbEvent.SLEEP 目标休眠
  • CbEvent.WAKE 目标激活

回调(handler)接受一个BodyCallback类型的参数,返回Void

二、ConstraintListener:针对Nape里面物理约束的状态监听,先略过

 new(event:CbEvent, options:Null<Dynamic>, handler:ConstraintCallback -> Void, precedence:Int = 0)
  • CbEvent.SLEEP
  • CbEvent.WAKE
  • CbEvent.BREAK

三、InteractionListener:交互监听,可以用来监听两两刚体的交互状态

 new(event:CbEvent, interactionType:InteractionType, options1:Null<Dynamic>, options2:Null<Dynamic>, handler:InteractionCallback -> Void, precedence:Int = 0)

物体1(options1)和物体2(options2)在某时(event)发生某种交互(interactionType)时做什么(handler)

event

  • CbEvent.BEGIN 交互开始
  • CbEvent.ONGOING 紧接在Begin之后,表示正处于交互中
  • CbEvent.END交互结束时

interactionType

  • Nape提供了3中不同的碰撞类型,分别用InteractionType类的常量:COLLISION,FLUID和SENSOR表示(也是InteractionListener构造函数的第2个参数),具体的用法分别说明如下:

    • InteractionType.COLLISION:普通刚体之间的碰撞
    • InteractionType.FLUID:刚体与浮力刚体的碰撞
    • InteractionType.SENSOR:刚体与sensor刚体的碰撞

    Nape中每个事件侦听器只能设置一种碰撞类型,作为第2个参数(InteractionType),如果需要对所有的碰撞类型侦听,又觉得创建3个侦听器太麻烦,也可以用InteractionType.ANY表示。

回调(handler)接受一个InteractionCallback类型的参数,返回Void

四、PreListeners这是一种特殊的InteractionListener

new(interactionType:InteractionType, options1:Null<Dynamic>, options2:Null<Dynamic>, handler:PreCallback -> Null<PreFlag>, precedence:Int = 0, pure:Bool = false)

这个监听没有event这个参数,因此默认在注册此监听的情况下,它会在交互的任何时间阶段都触发(具体来说就是nape在检测到两个物体交互发生时但还没做进一步的物理演算时会触发的. 在交互过程中每次触发step函数都会执行这个handler)根据需要在两物体发生交互前改变一些状态(比如之前定义两个物体能发生交互,可以在这个监听里面让他们不交互),之后才触InteractionListener的回调。除了handler之外其他参数和Interlistener功能都类似,老规矩handler接受的参数是PreCallback,但是它的回调除了是Void之外还可以是PreFlag类型,

Nape定义了四个不同的PreFlag常数

PreFlag.ACCEPT

如果返回此Flag,说明交互在这一步和接下来的所有((触发CbEvent.End之前))step函数执行中都是允许交互的.并且这个回调(handler)将在CbEvent.End前只触发这一次.

PreFlag.IGNORE

如果返回此Flag,说明交互在这一步和接下来的所有((触发CbEvent.End之前))step函数执行中都是忽略交互的.并且这个回调(handler)将在CbEvent.End前只触发这一次.

PreFlag.ACCEPT_ONCE

如果返回此Flag,说明交互只在这一步step函数执行中是允许交互的.这个回调在CbEvent.End前的每一次step都会继续执行用来判断Preflag的值

PreFlag.IGNORE_ONCE

如果返回此Flag,说明交互只在这一步step函数执行中是忽略交互的.这个回调在CbEvent.End前的每一次step都会继续执行用来判断Preflag的值

pure参数的作用:

当Body在一定时间内没有速度变化时,它的状态会自动由awake状态变成sleep状态时,即使在两个物体发生交互时也会触发状态变化,当Body状态变成Sleep后任何注册的监听都不会被触发.

PreListener的最后一个参数pure如果是false可以让两个物体不进入休眠状态,这样就能一直得到回调了. 当然这个参数在PreFlag是Accept或者Ignore时是没有多少意义的,因为这两个flag会导致这个handler只触发一次.

Nape的回调系统 nape.callbacks的更多相关文章

  1. jQuery 2.0.3 源码分析 回调对象 - Callbacks

    源码API:http://api.jquery.com/jQuery.Callbacks/ jQuery.Callbacks()是在版本1.7中新加入的.它是一个多用途的回调函数列表对象,提供了一种强 ...

  2. Nape "不动"刚体的碰撞交互

    "不动"刚体,这里指的是以下两类刚体: 1.刚体的allowMovement和allowRotation都设false的刚体 2.KINEMATIC类型的刚体 如下代码,测试发现输 ...

  3. Nape 获取碰撞点加特效

    package { import nape.phys.Body; import nape.shape.Shape; import nape.shape.Circle; import flash.dis ...

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

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

  5. jQuery回调、递延对象总结(上篇)—— jQuery.Callbacks

    前言: 作为参数传递给另一个函数执行的函数我们称为回调函数,那么该回调又是否是异步的呢,何谓异步,如:作为事件处理器,或作为参数传递给 (setTimeout,setInterval)这样的异步函数, ...

  6. jQuery回调、递延对象总结(一)jQuery.Callbacks详解

    前言: 作为参数传递给另一个函数执行的函数我们称为回调函数,那么该回调又是否是异步的呢,何谓异步,如:作为事件处理器,或作为参数传递给 (setTimeout,setInterval)这样的异步函数, ...

  7. jquery源码分析(四)——回调对象 Callbacks

    借用百度百科来说明下回调函数: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该 ...

  8. jQuery 源码解析(八) 异步队列模块 Callbacks 回调函数详解

    异步队列用于实现异步任务和回调函数的解耦,为ajax模块.队列模块.ready事件提供基础功能,包含三个部分:Query.Callbacks(flags).jQuery.Deferred(funct) ...

  9. CNN基础四:监测并控制训练过程的法宝——Keras回调函数和TensorBoard

    训练模型时,很多事情一开始都无法预测.比如之前我们为了找出迭代多少轮才能得到最佳验证损失,可能会先迭代100次,迭代完成后画出运行结果,发现在中间就开始过拟合了,于是又重新开始训练. 类似的情况很多, ...

随机推荐

  1. 【转】android资源目录---assets与res/raw区别

    blog.csdn.net/hshm20517/article/details/6461890 assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中.与res/raw不同点在于,ASS ...

  2. WinCE NAND flash - FAL

    http://blog.csdn.net/renpine/article/details/4572347 http://msdn.microsoft.com/en-US/library/ee48203 ...

  3. JPA详解

    2006 年 5 月 2 日,EJB 3.0 规范最终版由 JCP(Java Community Process) 正式公布,标准号为 JSR(Java Specification Request)2 ...

  4. 安装ArchLinux BIOS

    VMware默认下使用BIOS 本文基于ArchLinux(https://www.archlinux.org/)Current Release: 2013.08.01的ISO写的安装教程! ISO下 ...

  5. 信息学院第九届ACM程序设计竞赛题解

     A: 信号与系统 Time Limit: 1000 MS Memory Limit: 65536 KBTotal Submit: 238 Accepted: 44 Page View: 69 Des ...

  6. 分布式存储Memcache替代Session方案

    PHP自带的Session实际是在服务器中为每个客户建立独立的文件存放各自的信息. 在不做处理的情况下,很容易被客户端伪造.并且由于采用文件形式,所以存在着IO 读写的瓶颈.一般当用户在线达到1000 ...

  7. 常用ping服务列表

    以下是收集的ping服务器. ping是基于XML_RPC标准协议的更新通告服务,是用于blog在内容更新时通知博客搜索引擎及时进行抓取.更新的方式.博客搜索引擎在成功接受到ping以后,会立刻进行抓 ...

  8. Ajax异步请求-简单模版

    <script type="text/javascript"> window.onload = function () { document.getElementByI ...

  9. javascript设计模式5

    子类引用父类 function extend(subClass,superClass){ var F=function(){}; F.prototype=superClass.prototype; s ...

  10. const,readonly,static

    1.const 表示的是常量(constant),始终不会发生改变,在编译时就确定了.所以类中定义一个常量可以被类访问也可以被类的实例访问.定义时就不能和static一起用.如果用了也是没有作用的,所 ...