在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. SSMS错误代码大全

    0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文件. 5 拒绝访问. 6 句柄无效. 7 存储控制块被损坏. 8 存储空间不足,无法处理此 ...

  2. 常用WEB服务器的特点介绍

    经过系统的学习web服务器,现在知道常用的web服务器的优缺点,这对搭建网站架构时选择使用web服务器很有帮助,现在我简单总结一下: 1. Apache:属于重量级web服务器(重量级主要是在软件包的 ...

  3. linux tmp75 /dev/i2c-* 获取数据 demo

    /********************************************************************** * linux tmp75 /dev/i2c-* 获取数 ...

  4. C++学习笔记:List容器

    http://www.cplusplus.com/reference/list/list/ #include <list> list l:初始化一个0大小的表 list l(10):初始化 ...

  5. HDU 1736 美观化文字

    美观化文字 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. Spring整合Hessian

    Spring让Hessian变得不但强大,而且易用,但是易用背后,却有不少陷阱!   这个例子很简单,但实际上的确花费了我超过一小时的时间,排除了种种问题,最后问题终于水落石出.   整合以上篇Hel ...

  7. 关于触发器、存储过程和DBlink的综合运用 (转)

    关于触发器.存储过程和DBlink的综合运用 需求描述: 需要在两个不同oracl数据库实例中进行数据逻辑处理.如果A实例中的表有新数据插入或者数据更新,那么在B实例中执行与之相关的存储过程. 先假设 ...

  8. 法律网站分类 ­zt

    法律网站分类 ­ ­一.北大类 ­ 中国法律信息网(北大法学院)www.Chinalawinfo.com ­ ­北大金融法研究中心  www.pkufli.net ­ ­宪政知识网(北大法学院)www ...

  9. 【译】 AWK教程指南 附录C-AWK的内建函数

    C.1 字串函数 index( 原字串, 查找的子字串 ) 若原字串中含有欲寻找的子字串,则返回该子字串在原字串中第一次出现的位置,若未曾出现该子字串则返回0. 例如: $ awk 'BEGIN{ p ...

  10. 微信浏览器内置JavaScript 对象:WeixinJSBridge

    微信公众平台开发 微信公众平台开发模式 企业微信公众平台 微信浏览器 分享到朋友圈 发送给好友 分享到腾讯微博 作者:方倍工作室 原文: http://www.cnblogs.com/txw1958/ ...