easyx_framework V1.0.0
基于easyx的c++游戏框架
 
载入中...
搜索中...
未找到
Collider类 参考abstract

碰撞器基类. 更多...

#include <Collider.h>

类 Collider 继承关系图:
SceneComponent Component base BoxCollider CircleCollider

Public 成员函数

 Collider ()
 构造函数.
 
virtual ~Collider ()
 
virtual void BeginPlay () override
 初始化逻辑.
 
virtual void EndPlay () override
 处理析构处理不了的.
 
virtual void Update (float deltaTime) override
 实现更新碰撞坐标, 进行容器的更新.
 
const std::vector< Object * > & GetCollisionsByType (CollisionType type)
 由种类名获取所有跟这个碰撞体有碰撞的物体容器.
 
const int GetLayer () const
 获取碰撞层级.
 
void SetLayer (int layer)
 设置碰撞层级.
 
CollisionType GetType () const
 获取碰撞物体种类.
 
void SetType (CollisionType type)
 设置碰撞物体种类.
 
ColliderShape GetShape () const
 获取碰撞形状.
 
void SetCollisionMode (ColliderMode mode)
 设置碰撞模式.
 
ColliderMode GetCollisionMode ()
 获取碰撞模式.
 
virtual void Deactivate () override
 停用碰撞体.
 
virtual void DrawDebugLine ()=0
 绘制调试线 _debug_模式执行.
 
bool IsCollisionsEmpty () const
 是否与任何碰撞体无接触
 
void SetPhysicsMaterial (const PhysicsMaterial &material)
 设置物理材质
 
Rect GetRect () const
 
HitResult CollisionHit (Collider *another)
 
- Public 成员函数 继承自 SceneComponent
void AttachTo (SceneComponent *par)
 设置所属组件
 
void DetachForm (SceneComponent *par)
 解除所属组件.
 
virtual void Destruct ()
 解除场景组件绑定并销毁
 
Vector2D GetLocalPosition () const
 获取相对坐标
 
float GetLocalRotation () const
 获取相对角度
 
Vector2D GetLocalScale () const
 获取相对缩放大小
 
Vector2D GetWorldPosition () const
 获取场景组件的世界坐标
 
float GetWorldRotation () const
 获取场景组件的世界旋转角度
 
Vector2D GetWorldScale () const
 获取场景组件的世界的缩放大小
 
void SetLocalPosition (const Vector2D &pos)
 设置相对坐标
 
void SetLocalRotation (float rot)
 设置相对角度
 
void SetLocalScale (const Vector2D &scale)
 设置相对缩放大小
 
void AddPosition (const Vector2D &pos)
 加上一个坐标
 
void AddRotation (float rot)
 加上一个角度
 
- Public 成员函数 继承自 Component
void SetOwner (class Object *owner)
 设置绑定对象.
 
virtual void Activate ()
 激活组件
 
ObjectGetOwner () const
 获取绑定对象指针
 
- Public 成员函数 继承自 base
 base ()
 
virtual ~base ()
 
std::string GetName () const
 
void SetName (const std::string &name)
 

静态 Public 成员函数

static HitResult CollisionHitCircleToCircle (Collider *, Collider *)
 圆实体类型之间发生物理碰撞
 
static HitResult CollisionHitCircleToBox (Collider *, Collider *)
 圆实体和盒型实体之间发生物理碰撞
 
static HitResult CollisionHitBoxToBox (Collider *, Collider *)
 盒型和盒型实体之间发生物理碰撞
 

Public 属性

CollisionOverlapDelegate OnComponentBeginOverlap
 碰撞体刚接触的委托
 
CollisionOverlapDelegate OnComponentEndOverlap
 碰撞体刚从接触到不重叠的委托
 
CollisionHitOverlapDelegate OnComponentHitOverlap
 发生实体碰撞的委托
 

静态 Public 属性

static HitResult(* CollisionHitMap [3])(Collider *, Collider *)
 映射关系 圆是0 方是1 进行加法
 

Protected 成员函数

virtual bool CollisionJudge (Collider *another)=0
 碰撞判断(纯虚函数).
 
virtual bool IsMouseOver ()=0
 判断是否跟鼠标发生了碰撞.
 
- Protected 成员函数 继承自 SceneComponent
void process_Destruct ()
 销毁组件
 

Protected 属性

PhysicsMaterial material
 物理材质
 
ColliderShape shape = ColliderShape::Circle
 碰撞形状
 
Rect rec_pos = {0,0,0,0}
 矩形框区域
 
- Protected 属性 继承自 SceneComponent
SceneComponentparent = nullptr
 父指针
 
- Protected 属性 继承自 Component
class ObjectpOwner = nullptr
 处理控制逻辑 有对象物体的指针才能进行控制
 
bool bIsEnabled = true
 是否激活
 

Private 成员函数

void Clear ()
 将碰撞体从世界彻底移除
 
void Erase ()
 处理碰撞体之间的信息删除逻辑
 
void Insert (Collider *another)
 处理碰撞体之间的信息插入逻辑.
 

Private 属性

Pair point = {-1,-1}
 碰撞左上角区域坐标
 
Pair point_rb = { -1,-1 }
 碰撞右下角区域坐标
 
CollisionType type = CollisionType::Default
 碰撞物体种类
 
int layer = 0
 碰撞图层顺序,越大的值越上面
 
ColliderMode mode = ColliderMode::Trigger
 碰撞模式
 
std::unordered_set< Collider * > collisions
 存储发生碰撞的容器 就是区域重叠的碰撞组件地址
 
std::vector< Object * > aims
 存储所有种类名获取跟这个碰撞体有碰撞的物体容器
 
std::vector< Collider * > collisions_to_erase
 结束碰撞缓冲区
 
RigidBodyrigidAttached = nullptr
 附着的刚体组件 实现物理模拟
 

友元

class Controller
 
class RigidBody
 
void World::ProcessColliderZones ()
 

详细描述

碰撞器基类.

实现碰撞.实现一些碰撞共有基本逻辑的处理和声明周期的管理

备注
新的碰撞器类型都要继承他

构造及析构函数说明

◆ Collider()

Collider::Collider ( )
inline

构造函数.

世界碰撞容器中插入

◆ ~Collider()

virtual Collider::~Collider ( )
inlinevirtual

成员函数说明

◆ BeginPlay()

void Collider::BeginPlay ( )
overridevirtual

初始化逻辑.

获取刚体组件的指针

重载 SceneComponent .

BoxCollider , 以及 CircleCollider 重载.

◆ Clear()

void Collider::Clear ( )
private

将碰撞体从世界彻底移除

清空这个碰撞体 及所有跟他有关的碰撞体.

◆ CollisionHit()

HitResult Collider::CollisionHit ( Collider * another)

◆ CollisionHitBoxToBox()

HitResult Collider::CollisionHitBoxToBox ( Collider * me,
Collider * another )
static

盒型和盒型实体之间发生物理碰撞

◆ CollisionHitCircleToBox()

HitResult Collider::CollisionHitCircleToBox ( Collider * me,
Collider * another )
static

圆实体和盒型实体之间发生物理碰撞

◆ CollisionHitCircleToCircle()

HitResult Collider::CollisionHitCircleToCircle ( Collider * me,
Collider * another )
static

圆实体类型之间发生物理碰撞

◆ CollisionJudge()

virtual bool Collider::CollisionJudge ( Collider * another)
protectedpure virtual

碰撞判断(纯虚函数).

子类重写

参数
[in]another检测的碰撞体
返回
是否发生了碰撞(即重叠)

BoxCollider , 以及 CircleCollider 内被实现.

◆ Deactivate()

void Collider::Deactivate ( )
overridevirtual

停用碰撞体.

从世界容器中删除

重载 Component .

◆ DrawDebugLine()

virtual void Collider::DrawDebugLine ( )
pure virtual

绘制调试线 _debug_模式执行.

BoxCollider , 以及 CircleCollider 内被实现.

◆ EndPlay()

void Collider::EndPlay ( )
overridevirtual

处理析构处理不了的.

主要就是一些顺序和生命周期的问题 Debug 2024/11/11 析构函数的时候会先调用子类的析构再调用父类的析构函数,但是删除组件是在父类执行,访问不到子类的成员,也转换不成子类

重载 SceneComponent .

◆ Erase()

void Collider::Erase ( )
private

处理碰撞体之间的信息删除逻辑

自己判断自己里面的碰撞体是否还有碰撞.

◆ GetCollisionMode()

ColliderMode Collider::GetCollisionMode ( )
inline

获取碰撞模式.

返回
碰撞模式

◆ GetCollisionsByType()

const std::vector< Object * > & Collider::GetCollisionsByType ( CollisionType type)
inline

由种类名获取所有跟这个碰撞体有碰撞的物体容器.

参数
[in]type种类名
返回
数组容器

◆ GetLayer()

const int Collider::GetLayer ( ) const
inline

获取碰撞层级.

返回
层级

◆ GetRect()

Rect Collider::GetRect ( ) const
inline

◆ GetShape()

ColliderShape Collider::GetShape ( ) const
inline

获取碰撞形状.

◆ GetType()

CollisionType Collider::GetType ( ) const
inline

获取碰撞物体种类.

◆ Insert()

void Collider::Insert ( Collider * another)
private

处理碰撞体之间的信息插入逻辑.

参数
[in]another需要插入的碰撞器

◆ IsCollisionsEmpty()

bool Collider::IsCollisionsEmpty ( ) const
inline

是否与任何碰撞体无接触

◆ IsMouseOver()

virtual bool Collider::IsMouseOver ( )
protectedpure virtual

判断是否跟鼠标发生了碰撞.

返回
鼠标是否在碰撞体内部

BoxCollider , 以及 CircleCollider 内被实现.

◆ SetCollisionMode()

void Collider::SetCollisionMode ( ColliderMode mode)
inline

设置碰撞模式.

参数
[in]mode碰撞模式

◆ SetLayer()

void Collider::SetLayer ( int layer)
inline

设置碰撞层级.

参数
[in]layer设置的层级

◆ SetPhysicsMaterial()

void Collider::SetPhysicsMaterial ( const PhysicsMaterial & material)
inline

设置物理材质

◆ SetType()

void Collider::SetType ( CollisionType type)
inline

设置碰撞物体种类.

参数
[in]设置的碰撞种类

◆ Update()

void Collider::Update ( float deltaTime)
overridevirtual

实现更新碰撞坐标, 进行容器的更新.

重载 SceneComponent .

BoxCollider , 以及 CircleCollider 重载.

友元及相关符号说明

◆ Controller

friend class Controller
friend

◆ RigidBody

friend class RigidBody
friend

◆ World::ProcessColliderZones

void World::ProcessColliderZones ( )
friend

类成员变量说明

◆ aims

std::vector<Object*> Collider::aims
private

存储所有种类名获取跟这个碰撞体有碰撞的物体容器

◆ CollisionHitMap

HitResult(* Collider::CollisionHitMap[3])(Collider *, Collider *)
static

映射关系 圆是0 方是1 进行加法

◆ collisions

std::unordered_set<Collider*> Collider::collisions
private

存储发生碰撞的容器 就是区域重叠的碰撞组件地址

◆ collisions_to_erase

std::vector<Collider*> Collider::collisions_to_erase
private

结束碰撞缓冲区

◆ layer

int Collider::layer = 0
private

碰撞图层顺序,越大的值越上面

◆ material

PhysicsMaterial Collider::material
protected

物理材质

◆ mode

ColliderMode Collider::mode = ColliderMode::Trigger
private

碰撞模式

◆ OnComponentBeginOverlap

CollisionOverlapDelegate Collider::OnComponentBeginOverlap

碰撞体刚接触的委托

◆ OnComponentEndOverlap

CollisionOverlapDelegate Collider::OnComponentEndOverlap

碰撞体刚从接触到不重叠的委托

◆ OnComponentHitOverlap

CollisionHitOverlapDelegate Collider::OnComponentHitOverlap

发生实体碰撞的委托

◆ point

Pair Collider::point = {-1,-1}
private

碰撞左上角区域坐标

◆ point_rb

Pair Collider::point_rb = { -1,-1 }
private

碰撞右下角区域坐标

◆ rec_pos

Rect Collider::rec_pos = {0,0,0,0}
protected

矩形框区域

◆ rigidAttached

RigidBody* Collider::rigidAttached = nullptr
private

附着的刚体组件 实现物理模拟

◆ shape

ColliderShape Collider::shape = ColliderShape::Circle
protected

碰撞形状

◆ type

CollisionType Collider::type = CollisionType::Default
private

碰撞物体种类

只会跟有映射关系的碰撞器发生碰撞