p71924506 3c157e7772 | ||
---|---|---|
.idea/.idea.2ddemo/.idea | ||
art | ||
fonts | ||
.gitattributes | ||
.gitignore | ||
2ddemo.csproj | ||
2ddemo.sln | ||
Hud.cs | ||
Main.cs | ||
Mob.cs | ||
Player.cs | ||
hud.tscn | ||
icon.svg | ||
icon.svg.import | ||
main.tscn | ||
mob.tscn | ||
player.tscn | ||
project.godot | ||
readme.md |
readme.md
项目介绍
自己研究的游戏小demo
目前只是跟着文档撸demo阶段,不要在意不要在意
JUST FOR FUN! XD
在 Godot 游戏引擎 中,RigidBody2D
和 Area2D
是两种常用的 2D 物理节点,尽管它们都可以检测碰撞,但它们的用途和行为大不相同。让我们深入了解它们的区别和用途。
1. RigidBody2D
RigidBody2D
是 Godot 中的物理对象,它主要用于模拟真实的物理行为。它受物理引擎的影响,会根据力、碰撞和重力等物理规则进行移动。
特性:
- 物理受控:
RigidBody2D
是受 Godot 物理引擎完全控制的对象,你不能直接设置它的位置或旋转,必须通过施加力(如重力、推力、碰撞等)来间接控制它的运动。 - 运动模式:
RigidBody2D
有几种不同的模式,允许你定义它的行为:- Rigid(刚体):完全受物理引擎控制。适合用来模拟真实的物理物体,比如箱子、石头等。
- Static(静态):不受物理引擎影响,用于不动的物体,如地面或墙壁。
- Character(角色):介于刚体和运动体之间,适合玩家角色的控制,它受物理影响,但能更直接地控制移动。
- Kinematic(运动体):它可以手动控制运动,通常用于玩家角色、敌人等。
使用场景:
- 模拟物理效果:用于需要真实物理互动的对象,比如物体掉落、子弹的反弹、角色的移动等。
- 碰撞反应:当
RigidBody2D
与其他物体碰撞时,会根据物理规则(如速度、质量、摩擦等)产生反应。
示例:
var force = new Vector2(100, 0); // 向右施加一个推力
ApplyCentralImpulse(force); // 给刚体施加瞬间力
2. Area2D
Area2D
是一种专门用于检测区域内的物体和触发事件的节点,它本身不受物理引擎的影响,不模拟物理运动。Area2D
更像是一个逻辑区域,它可以用来检测何时有对象进入或离开区域,并触发相关的信号。
特性:
- 区域检测:
Area2D
可以检测物体是否进入了其定义的区域,可以用于触发事件,比如检测玩家是否进入危险区、道具拾取区等。 - 信号驱动:
Area2D
主要依靠信号机制来处理事件,常用信号包括:body_entered
: 当一个物体进入区域时触发。body_exited
: 当一个物体离开区域时触发。
- 影响区域内的物体:
Area2D
可以设置一些影响区域内物体的参数,比如重力、伤害或其他自定义的游戏机制。
使用场景:
- 触发事件:用于触发一些基于位置或状态的事件,比如玩家进入某个区域触发机关,或者敌人进入警戒范围触发警报。
- 无物理交互:
Area2D
本身不会受到物理引擎的影响,因此它适用于逻辑处理,而不是物理碰撞反应。
示例:
func _on_Area2D_body_entered(body):
if body.name == "Player":
print("Player entered the area")
3. RigidBody2D 和 Area2D 的主要区别
- 物理控制:
RigidBody2D
是一个受物理引擎控制的物体,模拟真实的物理行为;Area2D
则不受物理控制,只是用于检测区域内的物体和触发事件。 - 碰撞处理:
RigidBody2D
主要用于物理碰撞检测,模拟物体之间的交互;Area2D
用于区域检测,它不会在物理上与物体产生互动,而是用来检测物体进入、离开或执行某些逻辑。 - 信号触发:
Area2D
主要通过信号处理逻辑事件,而RigidBody2D
更多用于物理反应的模拟。
4. 实际应用场景比较
用途 | RigidBody2D | Area2D |
---|---|---|
物理模拟 | 模拟真实物理行为,如物体掉落、碰撞、反弹 | 不用于物理模拟 |
碰撞检测 | 用于物理碰撞反应,如刚体之间的相互作用 | 用于检测物体进入/离开特定区域 |
运动控制 | 受物理引擎控制,通过力或冲量移动 | 不用于直接控制物体运动,适合触发逻辑事件 |
应用场景 | 角色、敌人、道具等需要受物理影响的对象 | 检测区域(触发器)、重力场、道具拾取区等 |
总结
RigidBody2D
:用于需要物理交互的物体,受物理引擎控制,适合模拟现实世界的物理行为。Area2D
:用于逻辑区域检测,适合处理物体进入、离开的逻辑,不受物理引擎影响。