(八)flax Engine游戏引擎物理引擎——物理碰撞器
2021SC@SDUSC
之前的七次flaxEngine游戏引擎中的物理引擎分析涵盖了四种不同 的物理对象的分析,本次源码分析我们将针对flaxEngine游戏引擎中最后一个Actor 对象——PhysicsColliderActor进行源码分析。后面我们将针对物理引擎中的连接器和其他物理对象进行分析。
同上次一样本次PhysicsColliderActor (物理碰撞器)的相关源码内容较少,所以我将针对PhysicsColliderActor.h头文件和PhysicsColliderActor.c 文件进行分析。
一:PhysicsColliderActor.h头文件:
API_CLASS(Abstract) class FLAXENGINE_API PhysicsColliderActor : public Actor
{
DECLARE_SCENE_OBJECT_ABSTRACT(PhysicsColliderActor);
首先是class的定义:继承自Actor对象名字叫PhysicsColliderActor(物理对撞机)
API_EVENT() Delegate<const Collision&> CollisionEnter;
此函数为此碰撞器初始化碰撞开始时发生(它与某物碰撞)
API_EVENT() Delegate<const Collision&> CollisionExit;
此函数为此碰撞器注册碰撞结束时发生(它结束与某物的碰撞)
API_EVENT() Delegate<const Collision&> CollisionExit;
此函数为此碰撞器注册触发器接触开始时发生(另一个碰撞器输入它并触发事件)。
API_EVENT() Delegate<PhysicsColliderActor*> TriggerExit;
此函数为该碰撞器注册触发器接触端时发生(另一个碰撞器进入并触发事件)。
API_PROPERTY() virtual RigidBody* GetAttachedRigidBody() const = 0;
获取此对象的刚体属性。
API_FUNCTION() virtual void OnCollisionEnter(const Collision& c);
此函数表示一个碰撞体初始化
API_FUNCTION() virtual void OnCollisionExit(const Collision& c);
此函数表示一个碰撞体结束
API_FUNCTION() virtual void OnTriggerEnter(PhysicsColliderActor* c);
当为该碰撞器注册了一个触发触发启动时调用(另一个碰撞器进入并触发该事件)
API_FUNCTION() virtual void OnTriggerExit(PhysicsColliderActor* c);
当为该碰撞器注册触发器接触端时调用(另一个碰撞器进入并触发事件)。
上述就是PhysicsColliderActor(碰撞器)的头文件的全部内容,接下来我们分析PhysicsColliderActor.c文件。
二:PhysicsColliderActor.c
PhysicsColliderActor::PhysicsColliderActor(const SpawnParams& params): Actor(params)
{
}
构造函数,维护一个内存
void PhysicsColliderActor::OnCollisionEnter(const Collision& c)
{CollisionEnter(c);auto rigidBody = GetAttachedRigidBody();if (rigidBody)rigidBody->OnCollisionEnter(c);
}
此函数是一个碰撞器的初拾化,其中的CollisionEnter是刚体中一个函数可以查看我之前刚体的内容板块。
void PhysicsColliderActor::OnCollisionExit(const Collision& c)
{CollisionExit(c);auto rigidBody = GetAttachedRigidBody();if (rigidBody)rigidBody->OnCollisionExit(c);
}
此函数表示一个碰撞体结束,同上述创建一个碰撞器一样调用其刚体的函数。
void PhysicsColliderActor::OnTriggerEnter(PhysicsColliderActor* c)
{TriggerEnter(c);auto rigidBody = GetAttachedRigidBody();if (rigidBody)rigidBody->OnTriggerEnter(c);
}
当为该碰撞器创建了一个触发触发启动时调用(另一个碰撞器进入并触发该事件),获取碰撞器的附着刚体,调用其方法。
void PhysicsColliderActor::OnTriggerExit(PhysicsColliderActor* c)
{TriggerExit(c);auto rigidBody = GetAttachedRigidBody();if (rigidBody)rigidBody->OnTriggerExit(c);
}
当为该碰撞器创建触发器接触端时调用(另一个碰撞器进入并触发事件)。获取碰撞器的附着刚体,然后调用刚体的相关方法。
上述就是PhysicsColliderActor.h头文件和PhysicsColliderActor.c文件的全部内容,经过相关的源码分析我们了解到PhysicsColliderActor大部分都是依靠刚体来实现物理内容的定义或者物理属性的限制。所以可以看出来flaxEngine游戏引擎中的物理引擎大部分都是依靠刚体来实现的物理条件的限制,所以刚体在物理引擎中是十分重要的。他是物理 引擎的Actor的基本单位,所以如果要了解一个游戏引擎的物理,首先要好好查看其物理引擎的相关内容的定义。此对我们了解其他内容也是很大程度的上的帮助。
本次flax Engine游戏引擎的物理引擎分析完毕,而flaxEngine游戏引擎中的Actor对象内容我们就全部分析结束。所以我们下次将针对物理引擎中的连接器和其他物理对象进行分析。
(八)flax Engine游戏引擎物理引擎——物理碰撞器相关推荐
- (九)flax Engine 游戏引擎物理引擎joints(关节)
2021SC@SDUSC 前八次文章我们分析了flax Engine 游戏引擎中物理引擎的Actors(角色)包下的相关的源码的分析,从本次开始我们将针对flax Engine 游戏引擎中的物理引擎中 ...
- (十三)Flax Engine游戏引擎物理引擎 physics(2)
2021SC@SDUSC 上篇我们进行flax Engine游戏引擎中物理引擎中physics(物理)内容的部分分析.讲述了光线和模拟物理系统中的一些函数定义和变量的源代码,本次我们紧接着上次的内容继 ...
- (十二)Flax Engine游戏引擎物理引擎 physics
2021SC@SDUSC 最后我们进行flax Engine游戏引擎中物理引擎中physics(物理)的分析,这个包中含有所有用到的物理系统的相关应用,包括四个大类的定义:1:物理对撞机 2:铰链 3 ...
- (十一)Flax Engine游戏引擎物理引擎 joints (关节)
2021SC@SDUSC 本次我们继续针对flax Engine 游戏引擎中物理引擎的joints 包进行源代码的分析.上次我们分析了距离铰链和固定铰链,本次我们将针对flax Engine 中最后一 ...
- (五)flax Engine 游戏引擎——载具
2021SC@SDUSC 上次我们讲述了flax Engine游戏引擎中的最基本的组成结构刚体和其源代码的分析.本次我将讲述flax Engine游戏引擎中的WheeledVehicle(载具)的相应 ...
- Unity --- 物理引擎 ---- 刚体RigidBody 与 碰撞器 collider
1.RigidBody(刚体)的作用是让物体具有物理特性(比如说重力,摩檫力等等) 2.如果想让物体能够与其它物体发生碰撞的话,我们还需要一个组件 --- Colider碰撞器组件 1.上图就是Uni ...
- Physics Engine - Car Games [ 物理引擎 - 赛车游戏 ]
时间:2017/3/22 大三下学期 最近做完了一堆想要进一步学习的东西,便突然闲了下来,于是突然想用C++和OpenGL做一个赛车游戏,顺便练一下手.可是,真正上手起来发现,对于一款游戏而言,游戏引 ...
- 【日常点滴016】python游戏库arcade结合Tiled map editor地图编辑器和Pymunk物理引擎制作游戏过程记录,并最终打包为exe文件
独此一家,建议收藏 前言 一.创建一个空白窗口 step001.py代码示例 二.创建很多全局能用的常量 step002.py代码示例 三.创建实例变量即代表各种精灵等的变量 step003.py代码 ...
- 游戏引擎开发和物理引擎_视频游戏开发的最佳游戏引擎
游戏引擎开发和物理引擎 In this article, we'll look at some of the most popular game engines for video game deve ...
- 常见3D游戏物理引擎总结
1. Havok: 老牌的君王,支持功能如下: http://www.havok.com · Collision Detection - including Continuous P ...
最新文章
- 皮一皮:这车是要开上天啊...
- centos7 安装git_Gitlab安装及使用
- 密封槽设计标准_哈尔滨轴承 | 超全面机械密封选型
- 乐山市计算机学校太坑,乐山市计算机学校小规矩成就大素养
- Objective-C 语法快速参考(附:Learning_Objective-C_A_Primer_中文版)
- java8 朗姆表达式,java同步数据库时间问题[问题点数:20分,结帖人vtison]
- P4777 【模板】扩展中国剩余定理(EXCRT)
- Ubuntu18.04 orb-slam3编译出现的错误 undefined reference to symbol ‘_ZN3MPI8Datatype4FreeEv‘ libmpi_cxx.so
- ZCuPb10Sn10铸造锡青铜板ZCuPb10Sn10力学性能
- dev万能头文件_【C++】Dev-C++的“万能头文件”真的万能吗?
- Python自动化办公:xlwt万字教程
- 两种领导力:温柔与严厉
- APP - 微信朋友圈如何发高清原图?
- stata面板数据聚类及数据导入处理、虚拟变量等
- 初始化之前使寄存器恢复缺省值的重要性
- Apriltag编解码系统
- svg常用元素和属性
- Cadence 中贴片元件焊盘的制作
- 博后招募 | 香港大学蒋海波齐晓娟教授联合招收AI4Science方向博士后/RA
- SEO--搜索引擎优化(如何让你的网站排名靠前)
热门文章
- 万年历c语言程序设计免费,C语言程序设计万年历程序
- 图像切割之(五)活动轮廓模型之Snake模型简单介绍
- Windows驱动开发——WDM驱动
- 胡晓明的“出埃及记”,他将带领支付宝驶向何方?
- ROS 2 Crystal Clemmys版机器人操作系统补充说明
- SQLMAP注入拖库过程 1
- 清华自动化大一 C++作业引爆全网,特奖得主、阿里P6:我们也做不到
- Firebug下载地址及安装方法
- 用GHOST一键恢复之后,电脑只剩C盘了
- pandaboard 安装_pandaboard---文件系统的建立(4)