在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. Scrapy在win7 32位的安装及依赖包

    Scrapy,一个网络爬虫的框架,首先第一步肯定是安装. 参考网上的文章. 安装过程中需要用到pip工具,请自行安装. 1.安装python 这个是必须的,既然都用到scrapy了,肯定已经安装了py ...

  2. Android横竖屏切换总结

    Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 ...

  3. Maven相关内容学习笔记一:基本配置和使用

    首先必须推荐的这本书<Maven实战> 许晓斌,机械工业出版社 Maven简介 其实使用Maven也有很久时间了,大部分都是别人建好了工程我使用一下,实际上并没有非常详细的使用经验,这次到 ...

  4. 【转】java枚举类型enum的使用

    原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...

  5. 【Web前沿技术】纯 CSS3 打造的10个精美加载进度条动画

    之前向大家介绍8款优秀的 jQuery 加载动画和进度条插件,今天这篇文章向大家推荐10个纯 CSS3 代码实现精美加载进度条动画效果的方案.加载动画和进度条在网站和 Web 应用中的使用非常流行,特 ...

  6. 我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp)

    我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp) 分类: [自动化]2007-07-19 10:04 34038人阅读 评论(38) 收藏 举报 vb嵌入式dostcp ...

  7. 开源项目ets_cache分析

    1 背景 当在程序中,有大量的数据需要读写,数据库的响应会延迟,甚至阻塞.缓存可以缓解对数据库访问的压力,而且在内存中数据的读写要比读写硬盘上的数据快. 2 目的 ets_cache是用erlang实 ...

  8. Android中Toast的用法简介

    转自:http://www.cnblogs.com/GnagWang/archive/2010/11/26/1888762.html Toast是Android中用来显示显示信息的一种机制,和Dial ...

  9. HDU 1394-Minimum Inversion Number(BIT)

    题意: 给你n个数字的序列 每次把第一个数字放到最后 得到一个新序列 一共有n个序列求这些序列中哪个序列含最小的总的逆序数 (输出最小总逆序数) 分析: 用BIT求出初始各数的逆序数,第一个数放最后它 ...

  10. LightOJ 1422 Halloween Costumes 区间dp

    题意:给你n天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服就不能再穿了,问至少要带多少条衣服才能参加所有宴会 思路:dp[i][j]代表i-j天最少要带的衣服 从后向前dp 区间从大到小 更新d ...