在 Godot 4 中构建触摸屏摄像头
1.首先,我们从 Camera2D 节点开始。为了使 Camera2D 具有触控响应功能,我们向其添加一个脚本。因此,右键单击 -> attach 脚本。让我们将其命名为 TouchCameraController.gd。https://finepointcgi.io/wp-content/uploads/2023/06/image.png
首先,我们将在 Godot 中使用 Camera2D 节点。我们还需要一堆变量来控制我们的相机。我们有用于缩放速度、平移速度、旋转速度的变量,还有一些用于控制我们是否可以平移、缩放和旋转的变量。还有一些其他变量可以帮助我们存储相机和触摸输入的状态。这是它的外观:
extends Camera2D
@export var zoom_speed: float = 0.1
@export var pan_speed: float = 1.0
@export var rotation_speed: float = 1.0
@export var can_pan: bool
@export var can_zoom: bool
@export var can_rotate: bool
var start_zoom: Vector2
var start_dist: float
var touch_points: Dictionary = {}
var start_angle: float
var current_angle: float
2.现在我们已经设置好了,让我们开始平移。这是摄像机在场景中的基本移动。为此,我们需要监听一些 input 事件。让我们重写 _input(event) 函数来检查 touch 事件和 drag 事件:
func _input(event):
if event is InputEventScreenTouch:
_handle_touch(event)
elif event is InputEventScreenDrag:
_handle_drag(event)
现在,对于我们的 _handle_touch(event) 函数,我们需要跟踪我们触摸屏幕的位置。此函数将使用触摸的索引作为键,将每个触摸点的位置存储在 touch_points 字典中。如果触摸点少于两个,我们还会将 start_dist 重置为 0:
func _handle_touch(event: InputEventScreenTouch):
if event.pressed:
touch_points = event.position
else:
touch_points.erase(event.index)
if touch_points.size() < 2:
start_dist = 0
只需一个触摸点,我们就可以平移相机。这是在 _handle_drag(event) 函数中完成的:
func _handle_drag(event: InputEventScreenDrag):
touch_points = event.position
if touch_points.size() == 1 and can_pan:
offset -= event.relative * pan_speed
如果我们在本地 android 机器上运行它,您将看到我们的相机正在平移!
https://finepointcgi.io/wp-content/uploads/2023/06/pan.gif
页:
[1]