You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已有摇杆控制代码时,如何编写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做归一化处理,避免斜向移动时速度快于水平/垂直方向。

替代操作:编辑器手动连接信号

若不想在脚本中硬编码节点路径,可在编辑器中操作:

  1. 选中摇杆节点,在信号面板找到joystick_input和joystick_released信号。
  2. 将信号拖动到CharacterBody2D节点,选择对应的处理函数(即上述脚本中的_on_joystick_input和_on_joystick_released)。

内容的提问来源于stack exchange,提问作者Вадим

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:58:08