当前位置: 首页 > news >正文

Nape的回调系统 nape.callbacks

在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只触发一次.

 

 

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

相关文章:

  • Etcd集群与gRPC
  • 用友3.0时期,用友优普聚焦中型企业互联网化
  • 文件读写内容替换
  • 【线程】Thread中的join介绍
  • WCF学习资料
  • SQL 快速参考-----http://www.runoob.com/sql/sql-quickref.html
  • Linux 批量添加用户
  • SQL处理数字的几种方法
  • seo专题之开篇有益
  • Java NIO之Selector(选择器)
  • ios 重用UI部分代码的好方法(再也不用为局部变量的命名而烦恼啦!)
  • Hyperledger Fabric 账本结构解析
  • 无家可归的人和他的黑莓
  • Swift在扩展中关联对象
  • hdu 2225 The nearest fraction (数学题)
  • eclipse的离线汉化
  • emacs初体验
  • Github访问慢解决办法
  • Go 语言编译器的 //go: 详解
  • LeetCode29.两数相除 JavaScript
  • Mocha测试初探
  • MySQL几个简单SQL的优化
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • ubuntu 下nginx安装 并支持https协议
  • Vue 2.3、2.4 知识点小结
  • 电商搜索引擎的架构设计和性能优化
  • 前端攻城师
  • 06-01 点餐小程序前台界面搭建
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 容器镜像
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #if和#ifdef区别
  • #pragma multi_compile #pragma shader_feature
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (6)设计一个TimeMap
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (二)fiber的基本认识
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .Net MVC4 上传大文件,并保存表单
  • .Net Remoting常用部署结构
  • .Net Web项目创建比较不错的参考文章
  • .NET性能优化(文摘)
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @Autowired @Resource @Qualifier的区别
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [DEBUG] spring boot-如何处理链接中的空格等特殊字符
  • [docker] Docker容器服务更新与发现之consul