找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 742|回复: 0

在 Godot 4 中构建触摸屏摄像头

[复制链接]
发表于 2025-4-20 12:52:33 | 显示全部楼层 |阅读模式
翼龙汇论坛免责声明
翼龙汇论坛免责声明: 1内容责任 本论坛为用户提供信息交流的平台,所有用户在本论坛发表的帖子、评论及相关内容仅代表其个人观点,与本论坛立场无关。本论坛不对用户发布的内容真实性、合法性、准确性或完整性承担责任。 2.侵权行为 若任何用户发布的内容侵犯了您的合法权益(如知识产权、名誉权等),请及时联系我们并提供相关证明材料,我们将在核实后依法予以删除或屏蔽。 3.法律合规 用户应自觉遵守国家相关法律法规,不得发布违反法律、危害公共秩序及社会道德的内容,否则其责任由发布者本人承担。本论坛保留向执法机构提供相关信息的权利。 4.链接与外部内容 本论坛内的链接仅为方便用户访问相关信息而提供,不代表本论坛对其内容的认可或保证。本论坛对任何外部链接或第三方内容的准确性及合法性概不负责。 5.服务限制 本论坛努力维护服务的正常运行,但不对因不可抗力或技术原因导致的服务中断或信息丢失承担任何责任。 6.修改与解释权 本免责声明的修改权和最终解释权归本论坛所有。用户在使用本论坛服务的同时,视为已知晓并接受本声明的所有条款。

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1.首先,我们从 Camera2D 节点开始。为了使 Camera2D 具有触控响应功能,我们向其添加一个脚本。因此,右键单击 -> attach 脚本。让我们将其命名为 TouchCameraController.gd。

                               
登录/注册后可看大图

首先,我们将在 Godot 中使用 Camera2D 节点。我们还需要一堆变量来控制我们的相机。我们有用于缩放速度、平移速度、旋转速度的变量,还有一些用于控制我们是否可以平移、缩放和旋转的变量。还有一些其他变量可以帮助我们存储相机和触摸输入的状态。这是它的外观:
  1. extends Camera2D

  2. @export var zoom_speed: float = 0.1
  3. @export var pan_speed: float = 1.0
  4. @export var rotation_speed: float = 1.0
  5. @export var can_pan: bool
  6. @export var can_zoom: bool
  7. @export var can_rotate: bool

  8. var start_zoom: Vector2
  9. var start_dist: float
  10. var touch_points: Dictionary = {}
  11. var start_angle: float
  12. var current_angle: float
复制代码

2.现在我们已经设置好了,让我们开始平移。这是摄像机在场景中的基本移动。为此,我们需要监听一些 input 事件。让我们重写 _input(event) 函数来检查 touch 事件和 drag 事件:
  1. func _input(event):
  2.         if event is InputEventScreenTouch:
  3.                 _handle_touch(event)
  4.         elif event is InputEventScreenDrag:
  5.                 _handle_drag(event)
复制代码

现在,对于我们的 _handle_touch(event) 函数,我们需要跟踪我们触摸屏幕的位置。此函数将使用触摸的索引作为键,将每个触摸点的位置存储在 touch_points 字典中。如果触摸点少于两个,我们还会将 start_dist 重置为 0:
  1. func _handle_touch(event: InputEventScreenTouch):
  2.         if event.pressed:
  3.                 touch_points[event.index] = event.position
  4.         else:
  5.                 touch_points.erase(event.index)

  6.         if touch_points.size() < 2:
  7.                 start_dist = 0
复制代码

只需一个触摸点,我们就可以平移相机。这是在 _handle_drag(event) 函数中完成的:
  1. func _handle_drag(event: InputEventScreenDrag):
  2.         touch_points[event.index] = event.position

  3.         if touch_points.size() == 1 and can_pan:
  4.                 offset -= event.relative * pan_speed
复制代码

如果我们在本地 android 机器上运行它,您将看到我们的相机正在平移!

                               
登录/注册后可看大图



翼龙汇论坛免责声明
翼龙汇论坛免责声明: 1内容责任 本论坛为用户提供信息交流的平台,所有用户在本论坛发表的帖子、评论及相关内容仅代表其个人观点,与本论坛立场无关。本论坛不对用户发布的内容真实性、合法性、准确性或完整性承担责任。 2.侵权行为 若任何用户发布的内容侵犯了您的合法权益(如知识产权、名誉权等),请及时联系我们并提供相关证明材料,我们将在核实后依法予以删除或屏蔽。 3.法律合规 用户应自觉遵守国家相关法律法规,不得发布违反法律、危害公共秩序及社会道德的内容,否则其责任由发布者本人承担。本论坛保留向执法机构提供相关信息的权利。 4.链接与外部内容 本论坛内的链接仅为方便用户访问相关信息而提供,不代表本论坛对其内容的认可或保证。本论坛对任何外部链接或第三方内容的准确性及合法性概不负责。 5.服务限制 本论坛努力维护服务的正常运行,但不对因不可抗力或技术原因导致的服务中断或信息丢失承担任何责任。 6.修改与解释权 本免责声明的修改权和最终解释权归本论坛所有。用户在使用本论坛服务的同时,视为已知晓并接受本声明的所有条款。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

QQ|Archiver|手机版|小黑屋|去背|站长工具|翼龙汇 |网站地图

GMT+8, 2025-5-17 20:10 , Processed in 0.092643 second(s), 17 queries .

Powered by Elonghui!

!copyright2024!

快速回复 返回顶部 返回列表