游戏开发中的物理之使用Area2D

给大家安利一个免费且实用的前端刷题(面经大全)网站,👉点击跳转到网站

介绍

Godot提供了许多碰撞对象以提供碰撞检测和响应。试图确定要为您的项目使用哪个选项可能会造成混淆。如果您了解每个问题的工作原理和优点和缺点,则可以避免这些问题并简化开发。在本教程中,我们将查看 Area2D节点并显示一些如何使用它的示例。

注意

本文档假定您熟悉Godot的各种物理机构。请先阅读物理简介。

什么是面积?

Area2D定义2D空间的区域。在此空间中,您可以检测到其他 CollisionObject2D节点重叠,进入和退出。区域还允许覆盖本地物理属性。我们将在下面探讨这些功能。

区域属性

区域具有许多属性,可用于自定义其行为。

../../_images/area2d_properties.png

前八个属性用于配置区域的物理替代行为。我们将在下面的部分中介绍如何使用它们。

监测和监视的是用来启用和禁用区域。

在“碰撞”部分中,可以配置区域的碰撞层和蒙版。

“音频总线”部分使您可以覆盖该区域中的音频,例如在播放器移动时应用音频效果。

请注意,Area2D扩展了CollisionObject2D,因此它还提供了从该类继承的属性,例如input_pickable。

重叠检测

Area2D节点最常见的用途可能是用于接触和重叠检测。当您需要知道两个物体已触摸但不需要物理碰撞时,可以使用区域来通知您该联系人。

例如,假设我们正在为玩家捡硬币。硬币不是坚固的物体-玩家不能站立或推动它-我们只希望它在玩家触摸时消失。

这是硬币的节点设置:

../../_images/area2d_coin_nodes.png

为了检测重叠,我们将适当的信号连接到Area2d上。使用哪种信号取决于播放器的节点类型。如果播放器在另一个区域,请使用area_entered。但是,假设我们的播放器是一个KinematicBody2D (因此是一种CollisionObject2D类型),那么我们将连接 body_entered信号。

注意

如果您不熟悉使用信号,请参阅信号的介绍。

public class Coin : Area2D
{

    public void OnCoinBodyEntered(PhysicsBody2D body)
    {
        QueueFree();
    }
}

现在我们的玩家可以收集硬币了!

其他一些用法示例:

  • 这些区域非常适合击中并造成伤害的子弹和其他射弹,但不需要其他任何物理过程,例如弹跳。
  • 在敌人周围使用较大的圆形区域来定义其“检测”半径。当玩家在该区域之外时,敌人无法“看到”它。
  • “安全摄像机”-在具有多个摄像机的较大级别上,将区域附加到每个摄像机并在播放器进入时激活它们。

有关在游戏中使用Area2D的示例,请参见您的第一个游戏。

区域影响

区域节点的第二个主要用途是改变物理学。默认情况下,该区域不会执行此操作,但是您可以使用“空间覆盖”属性启用它。当区域重叠时,将按优先级顺序进行处理(优先级较高的区域将首先处理)。有四个替代选项:

  • 合并-区域将其值添加到到目前为止已计算的值。
  • 替换-替换物理属性的区域,优先级较低的区域将被忽略。
  • 组合替换-该区域将其重力/阻尼值添加到到目前为止计算出的所有内容(按优先级顺序),而忽略任何较低优先级的区域。
  • Replace-Combine-替换该区域替换到目前为止计算出的所有重力/阻尼,但继续计算其余区域。

使用这些属性,可以创建具有多个重叠区域的非常复杂的行为。

可以覆盖的物理属性是:

  • 重力-区域内重力的强度。
  • Gravity Vec-重力方向。此向量不需要进行标准化。
  • 线性阻尼-物体停止移动的速度-每秒损失的线速度。
  • 角阻尼-物体停止旋转的速度-每秒损失的角速度。

点重力

重力点属性使您可以创建“引子”。 该区域的重力将根据Gravity Vec属性给出的点进行计算。 值是相对于Area2D的,因此例如使用(0,0)会将对象吸引到区域的中心。

例子

下面所附的示例项目包含三个区域,说明了物理覆盖。

在这里插入图片描述

您可以在此处下载该项目: using_area_2d.zip

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海拥✘

“听说赞赏的人运气会爆棚哦!”

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值