ShitEngine 1.4.2
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
载入中...
搜索中...
未找到
PhysicsSystem2D类 参考final

2D 物理系统 更多...

#include <PhysicsSystem2D.h>

类 PhysicsSystem2D 继承关系图:
System

Public 成员函数

 PhysicsSystem2D (int priority=50)
 ~PhysicsSystem2D () override
void init () override
 初始化(可覆写)
void update () override
 每帧更新(纯虚)
void fixedUpdate (float fixedDt) override
 固定步阶段(Scene 固定步循环节拍调用):补建自愈 → 步进一次 → 同步 Transform → 收集派发本步接触事件
void destroy () override
 销毁(纯虚)
void onFieldChanged (const std::string &fieldName) override
 反射字段被编辑器直写后回调(供子系统把字段变更实时同步到运行时状态)
bool onComponentAttached (Component *component) override
 组件挂载时调用。返回 true 表示本系统认领并处理了该组件(组件据此确定已注册)。
void onComponentDetached (Component *component) override
 组件卸下时调用。
void setGravity (const Vector2 &gravity)
 重力(像素/秒²),默认 {0, 320}
const Vector2 & getGravity () const
void setPixelsPerMeter (float ppm)
 设置像素↔米比例(必须在 init() 之前调用),默认 32
float getPixelsPerMeter () const
 当前像素↔米比例(实例字段,各物理系统独立)
void registerRigidBody (RigidBody2D *body)
void unregisterRigidBody (RigidBody2D *body)
void createRigidBody (RigidBody2D *body)
 为 RigidBody2D 创建物理体(组件认领时调用,从 Transform 读初始位姿)
void destroyRigidBody (RigidBody2D *body)
 销毁 RigidBody2D 的物理体并注销(组件卸下时调用)
void registerJoint (Joint2D *joint)
 注册关节组件(onAttach 时调用),并尝试创建 Box2D 关节
void unregisterJoint (Joint2D *joint)
 注销关节组件(onDetach/onDestroy 时调用)
void createJoint (Joint2D *joint)
 为 Joint2D 创建 Box2D 关节(幂等;bodyA/bodyB 就绪才创建)
void destroyJoint (Joint2D *joint)
 销毁 Joint2D 的 Box2D 关节并重置标志
void rebuildJoint (Joint2D *joint)
 重建 Box2D 关节(字段改动/类型切换/目标变更后调用):销毁旧关节按当前字段重建
Public 成员函数 继承自 System
 System (int priority=0)
virtual ~System ()
Scene * getScene () const
void setScene (Scene *scene)
int getPriority () const
void setPriority (int priority)

友元

class RigidBody2D

额外继承的成员函数

Protected 成员函数 继承自 System
void resetComponent (Component *comp)
 内部:把认领过的组件标记为未注册(系统销毁/注销时调用)。 否则组件 m_isRegistered 残留 true,同类系统重新注册时 System::init 补扫会跳过它们, 导致组件永久失去驱动系统。
Protected 属性 继承自 System
int m_priority
 优先级(小值先执行)
Scene * m_scene = nullptr
 所属场景

详细描述

2D 物理系统

包装 Box2D 3.x(C 语言 API)物理世界。 默认使用 b2SetLengthUnitsPerMeter(32) 以像素为长度单位, 用户无需手动转换像素↔米。

使用方式: scene->registerSystem<Shit::PhysicsSystem2D>();

由 Scene 固定步循环驱动(默认 60Hz):每步 补建自愈 → b2World_Step(fixedDt) → 同步刚体位姿到 Transform → 收集并派发本步接触事件(碰撞回调每固定步一次)。

priority=50,晚于 BehaviorSystem(0) 早于 RenderSystem(100)——同一固定步内 脚本的 onFixedUpdate 先施力/设速,物理随后模拟。

构造及析构函数说明

◆ PhysicsSystem2D()

PhysicsSystem2D ( int priority = 50)
explicit

◆ ~PhysicsSystem2D()

~PhysicsSystem2D ( )
override

成员函数说明

◆ createJoint()

void createJoint ( Joint2D * joint)

为 Joint2D 创建 Box2D 关节(幂等;bodyA/bodyB 就绪才创建)

◆ createRigidBody()

void createRigidBody ( RigidBody2D * body)

为 RigidBody2D 创建物理体(组件认领时调用,从 Transform 读初始位姿)

◆ destroy()

void destroy ( )
overridevirtual

销毁(纯虚)

实现了 System.

◆ destroyJoint()

void destroyJoint ( Joint2D * joint)

销毁 Joint2D 的 Box2D 关节并重置标志

◆ destroyRigidBody()

void destroyRigidBody ( RigidBody2D * body)

销毁 RigidBody2D 的物理体并注销(组件卸下时调用)

◆ fixedUpdate()

void fixedUpdate ( float fixedDt)
overridevirtual

固定步阶段(Scene 固定步循环节拍调用):补建自愈 → 步进一次 → 同步 Transform → 收集派发本步接触事件

重载 System .

◆ getGravity()

const Vector2 & getGravity ( ) const
inline

◆ getPixelsPerMeter()

float getPixelsPerMeter ( ) const
inline

当前像素↔米比例(实例字段,各物理系统独立)

◆ init()

void init ( )
overridevirtual

初始化(可覆写)

重载 System .

◆ onComponentAttached()

bool onComponentAttached ( Component * component)
overridevirtual

组件挂载时调用。返回 true 表示本系统认领并处理了该组件(组件据此确定已注册)。

重载 System .

◆ onComponentDetached()

void onComponentDetached ( Component * component)
overridevirtual

组件卸下时调用。

重载 System .

◆ onFieldChanged()

void onFieldChanged ( const std::string & fieldName)
overridevirtual

反射字段被编辑器直写后回调(供子系统把字段变更实时同步到运行时状态)

重载 System .

◆ rebuildJoint()

void rebuildJoint ( Joint2D * joint)

重建 Box2D 关节(字段改动/类型切换/目标变更后调用):销毁旧关节按当前字段重建

◆ registerJoint()

void registerJoint ( Joint2D * joint)

注册关节组件(onAttach 时调用),并尝试创建 Box2D 关节

◆ registerRigidBody()

void registerRigidBody ( RigidBody2D * body)

◆ setGravity()

void setGravity ( const Vector2 & gravity)

重力(像素/秒²),默认 {0, 320}

◆ setPixelsPerMeter()

void setPixelsPerMeter ( float ppm)

设置像素↔米比例(必须在 init() 之前调用),默认 32

◆ unregisterJoint()

void unregisterJoint ( Joint2D * joint)

注销关节组件(onDetach/onDestroy 时调用)

◆ unregisterRigidBody()

void unregisterRigidBody ( RigidBody2D * body)

◆ update()

void update ( )
overridevirtual

每帧更新(纯虚)

实现了 System.

◆ RigidBody2D

friend class RigidBody2D
friend

该类的文档由以下文件生成: