BEPUphysicsint碰撞事件详解

news2025/1/18 18:55:46

上一节我们給大家介绍了BEPUphysicsint的基本使用,在游戏开发中我们经常要使用物理引擎的事件,所以本节我们详细的讲解BEPUphysicsint 的物理事件。此物理引擎会产生了碰撞事件与非碰撞事件,碰撞事件大家好理解,非碰撞事件例如: 物理Entity的update事件,Entity的activation/deactivation事件等。本文主要详解由物理碰撞所导致的事件。

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

如何获取物理事件

接下来分析一下如何获得物理事件的delegate。每个可碰撞的物理Entity的有一个Collidable 对象,通过访问它的CollisionInformation属性就能获取得到,每个Collidable 都有一个自己的ContactEventManager, 通过访问Events 的每个Event的属性,就可以往里面添加回调函数,就可以获得该事件。所以获取物理事件的delegate: entity. CollisionInformation.Events.xxxxx事件。这样添加一个物理事件,我们可以做如下操作:

(1) 创建一个回调函数,回调函数的参数格式与物理事件Events中的delegate描述一致;

(2) 将这个回调函数,加入到对应物理事件Event的delegate中。

当物理引擎有物理事件发生的时候,就会触发回调到你对应的设置函数。

碰撞事件的类型

在物理Entity的ContactEventManager种我们可以找到所有的事件与事件类型,接下来详细讲解几组关键的物理碰撞相关的事件类型。

PairCreated: 当两个物理的Entity发生了边界重叠时触发;

PairRemoved: 当两个物理的Entity边界结束重叠时触发;

ContactCreated: 当两个物理Entity碰撞的时候,在Contact List的中的碰撞点信息有增加时触发;

InitialCollisionDetected: 当物理Entity的碰撞列表发生改变的时候调用,比如没有碰撞物体了,比如加了一个新的碰撞物体进来等。

ContactRemoved: 当两个物理Entity碰撞的时候,在Contact List的中的碰撞点信息有移除时触发;

CollisionEnded: 当两个物理Entity碰撞信息Contact List变为0的时候触发;

及时事件与延时事件

我在物理引擎中会有两类事件,一类是及时事件(ing,正在进行时),一类是延时事件(ed,过去式)。上面我们列举出来的事件都式延时事件,例如: ContactRemoved 每个后缀都是ed结束,表示延时事件。与之相对应的还有正在发生的事件(ing, 正在进行时),比如:PairRemoved /RemovingPair,这两个事件的区别在于一个是延时事件,一个是正在进行时事件。

在事件回调中安全的处理事件

物理事件的回调函数,都是物理引擎执行中回调的,有可能有些操作会改变物理引擎运行环境的Context,导致不安全的操作与异常,如何在回调函数中正确的安全的处理呢?

对于延迟事件,是在处理完所有的物理计算后,再来进行延迟事件处理的,所以相对来说还是安全的。这里你要注意一点,就是在延迟事件处理函数中的数据对象,有可能会在调用完事件函数后回收这些数据对象,所以你自己收集这些数据对象的时候要小心,小心物理引擎内部把传过来的事件对象数据給回收掉。

及时事件,相对于延时事件来说安全性就要小很多,因为它是物理引擎计算过程中调用的。正式由于它们是物理引擎迭代计算交互时调用,所以你可以拦截与修改物理交互。如果引擎使用多线程,即从工作线程(相比物理引擎主线程的另外一个线程)来调用物理引擎的及时事件,就要注意线程处理的上下文。及时事件的处理在回调函数内一次性解决,不应该保留到事件处理函数之外。

复合体的事件处理

在BEPU物理引擎中还有复合体(Compound Bodies)的概念,复合体为碰撞的子实体组成,子实体中有可以为子复合体,这样,就形成了一个复合体的树。复合体本身是没有物理几何学,它的非复合子对象是它的物理几何体。

在Compound Body中收集每个孩子的碰撞检测的事件是很不方便的,为了方便处理Compound Body收集孩子的物理事件后,触发到它的事件上。

今天的分享就到这里了,关注我们,持续的学习BEPUphysint3D物理引擎实战系列。

下节预告: 基于BEPUphysicsint整合到Unity项目实战

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

携程季报图解:营收69亿同比增29% 净利为2.45亿

雷递网 雷建平 12月15日携程集团有限公司(纳斯达克:TCOM;香港联交所:9961)今日发布财报。财报显示,携程2022年第三季度营收为69亿元,同比增长29%;净利润为2.45亿元;经调整…

原生拖拽太拉跨了,纯JS自己手写一个拖拽效果,纵享丝滑

前言 提到元素拖拽,通常都会先想到用 HTML5 的拖拽放置 (Drag 和 Drop) 来实现,它提供了一套完整的事件机制,看起来似乎是首选的解决方案,但实际却不是那么美好,主要是它的样式太过简陋,无法实现更高级的用…

spring boot实现文件上传和下载

文章目录 spring boot实现文件上传 1.文件上传 2.文件下载 1.文件上传 1.代码如下: package com.example.demo; import org.omg.PortableInterceptor.ServerRequestInfo; import org.springframework.stereotype.Controller; import org.springframework.we…

k8s 综合部署练习(针对负载均衡+外网访问web)

部署需求 (1)Kubernetes 区域可采用 Kubeadm 方式进行安装。 (2)要求在 Kubernetes 环境中,通过yaml文件的方式,创建Deployment控制器和4个Nginx Pod副本,并进入容器中修改index.html文件内容&…

【12月13日更新半决赛预测】用二元泊松模型预测2022年世界杯淘汰赛结果

用二元泊松模型预测2022年世界杯淘汰赛结果 网上有很多文章用双泊松(Double Poisson)模型来预测世界杯比赛结果。但是双泊松模型有一个严重的缺陷,那就是它假设比赛中两队的比分是条件独立的。而我们都知道,在对抗性比赛中&…

2022年拼多多元旦节会搞活动吗?拼多多有节日活动吗?

2022年拼多多元旦节会搞活动吗?拼多多有节日活动吗? 离春节只有一个月半的时间了,而且双十二也已经过了。要想等平台的活动,就只有元旦节和年货节了。有小伙伴想知道,拼多多元旦节会搞活动吗? 一、拼多多有节日活动吗? 拼多多购物节主要…

数据服务门槛再提升,这个“TOP1玩家”凭何再度领军?

在人工智能领域,数据的重要程度正在迅速提升。 根据ML大牛吴恩达提出的著名二八定律:80%数据20%模型更好的AI。他认为,一个机器学习团队80%的工作应该放在数据准备上,确保数据质量是最重要的工作,每个人都知道应该如此…

什么是元数据

元数据 元数据是描述数据的数据,关于数据的组织、数据域及其关系,本质上是关于数据的信息。元数据以数字化方式描述企业的数据、流程和应用程序,为企业数字资产的内容提供了上下文,使得数据更容易理解、查找、管理和使用。 元数据…

计算机毕设Python+Vue校园跳蚤平台(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Nginx教程(1)

文章目录1.1 简介1.2 常见的服务器1.3 反向代理1.4 Nginx的安装与运行1.5 Nginx的进程模型1.6 Nginx处理Web请求机制解析1.7 Nginx核心配置文件nginx.conf解析1.8 Nginx常用命令解析1.9 Nginx日志切割1.10 Nginx为静态资源提供服务1.11 使用Gzip压缩提高请求效率1.12 location匹…

React源码分析(二)渲染机制

准备工作 为了方便讲解&#xff0c;假设我们有下面这样一段代码&#xff1a; function App(){const [count, setCount] useState(0)useEffect(() > {setCount(1)}, [])const handleClick () > setCount(count > count)return (<div>勇敢牛牛, <sp…

java计算机毕业设计基于安卓Android的急救服务APP

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,急救服务系统就是信息时代变革中的产物之一。 任何系统都要遵循系统设…

Android9.0 Fiddler 模拟器抓包

目录 一、生成Fiddler证书并安装 二、制作证书 三、adb的配置 四、安装证书到Android手机 五、抓包 六、总结 一、生成Fiddler证书并安装 1.到官网下载fiddler插件 https://www.telerik.com/fiddler/add-onshttps://www.telerik.com/fiddler/add-ons 2.官网插件工具很多&a…

TCP/IP HTTP WebSocket Socket 路由

最近在写一个上位机&#xff0c;需要将采集到的数据上传到云平台&#xff0c;然后就考虑到使用WebSocket实现&#xff0c;但是WebSocket和Socket有啥区别&#xff0c;这两个东西分别是个啥&#xff0c;咱也不清楚&#xff0c;然后就查资料&#xff0c;发现有好多之前想了解但是…

Java面试基础篇-IO

UNIX提供5种I/O模型 var code “7cfcb088-556d-478a-b21d-12b255236dbd” BIO模型 在进程空间调用recvfrom时被阻塞,直到有数据才返回。 NIO模型 调用recvfrom时先返回EWOULDBLOCK错误&#xff0c;然后轮询是否有数据。 I/O复用 linux提供select/poll&#xff0c;其支…

Minecraft 1.19.2 Forge模组开发 07.拼图建筑(jigsaw)

如果你看过之前的Minecraft 1.19.2建筑生成的话&#xff0c;想必会更好理解这篇教程。 效果演示效果演示效果演示 1.我们本期准备生成的建筑分为4块&#xff0c;所以首先需要用4个结构方块将整个建筑包括起来&#xff1a; 2.之后我们需要用指令拿出拼图方块: give p minecraf…

数据结构与算法——Java实现递归、迷宫回溯问题、八皇后问题

目录 一、递归 1.1 介绍递归 二、迷宫回溯问题 2.1 代码实现 三、八皇后问题 3.1 基本介绍 3.2 分析思路 3.3 代码实现 一、递归 1.1 介绍递归 简单的说&#xff1a;递归就是方法自己调用自己&#xff0c;每次传入不同的变量。 递归有助于编程者解决复杂的问题&#x…

Efficient Zero-shot Event Extraction with Context-Definition Alignment论文解读

Efficient Zero-shot Event Extraction with Context-Definition Alignment code&#xff1a;tencent-ailab/ZED: This is the repository for EMNLP 2022 paper “Efficient Zero-shot Event Extraction with Context-Definition Alignment” (github.com) paper&#xff1a;…

【手把手】分布式定时任务调度解析之Elastic-Job

1、这货怎么没怎么听过 经常使用Quartz或者Spring Task的小伙伴们&#xff0c;或多或少都会遇到几个痛点&#xff0c;比如&#xff1a; 1、不敢轻易跟着应用服务多节点部署&#xff0c;可能会重复多次执行而引发系统逻辑的错误&#xff1b; 2、Quartz的集群仅仅只是用来HA&…

业主应该重视装修中的“道”而不是“术”!极家精工装修好不好!

业主应该重视装修中的“道”而不是“术”&#xff01;极家精工装修好不好&#xff01;看了很多业主问了很多关于装修中很琐碎的事儿&#xff0c;比如“装修流程”、“装修应该注意什么”、“装修哪些必须要重视”、“某某材料和某某材料相比哪个好”、“家里装了什么是你最不后…