已有摇杆控制代码时,如何编写CharacterBody2D的精灵移动代码?
Godot中基于自定义摇杆的CharacterBody2D移动控制实现
你已经实现了基于TouchScreenButton的自定义摇杆,以下是CharacterBody2D节点的移动控制代码实现步骤:
1. 节点结构建议
- 根节点:
CharacterBody2D(可命名为Player)- 子节点:
Sprite2D/AnimatedSprite2D(用于显示角色)
- 子节点:
- UI层节点:
CanvasLayer(放置摇杆,避免被角色遮挡)- 子节点:你的自定义摇杆(继承自
TouchScreenButton的节点)
- 子节点:你的自定义摇杆(继承自
2. CharacterBody2D脚本实现
创建脚本附加到CharacterBody2D节点上,代码如下:
extends CharacterBody2D @export var move_speed: float = 300.0 # 角色移动速度,可在编辑器调整 var current_direction: Vector2 = Vector2.ZERO var current_strength: float = 0.0 @onready var joystick: TouchScreenButton = get_node("/root/CanvasLayer/Joystick") # 替换为你的摇杆节点实际路径 func _ready(): # 连接摇杆的输入与释放信号 joystick.joystick_input.connect(_on_joystick_input) joystick.joystick_released.connect(_on_joystick_released) func _physics_process(delta: float): # 计算角色移动速度 var velocity = current_direction * move_speed * current_strength # 应用速度并处理碰撞 self.velocity = velocity move_and_slide() func _on_joystick_input(strength: float, direction: Vector2, delta: float): # 更新当前摇杆输入的力度与方向 current_strength = strength current_direction = direction.normalized() # 确保方向为单位向量,避免斜向移动速度异常 func _on_joystick_released(): # 摇杆松开时重置移动状态 current_strength = 0.0 current_direction = Vector2.ZERO
代码说明
- move_speed:导出变量,无需修改代码即可在编辑器中调整角色移动速度。
- 信号处理:通过连接摇杆的
joystick_input和joystick_released信号,实时获取摇杆输入状态。 - 物理移动:在
_physics_process中计算速度并调用move_and_slide,这是Godot 4中CharacterBody2D的标准移动逻辑,自动处理碰撞与地面贴合。 - 方向归一化:对摇杆传递的
direction做归一化处理,避免斜向移动时速度快于水平/垂直方向。
替代操作:编辑器手动连接信号
若不想在脚本中硬编码节点路径,可在编辑器中操作:
- 选中摇杆节点,在信号面板找到
joystick_input和joystick_released信号。 - 将信号拖动到
CharacterBody2D节点,选择对应的处理函数(即上述脚本中的_on_joystick_input和_on_joystick_released)。
内容的提问来源于stack exchange,提问作者Вадим
相关产品推荐
相关产品推荐

