微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何停止运动体行走时释放运动键?

如何解决如何停止运动体行走时释放运动键?

extends KinematicBody
var speed=10

var mouse_sensitivity=0.5
var direction=Vector3.ZERO
onready var head=$Head
func _ready():
    if Input.is_action_pressed("ui_cancel"):
        Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
func _input(event):
    if event is InputEventMouseMotion:
        rotate_y(deg2rad(-event.relative.x*mouse_sensitivity))
        head.rotate_x(deg2rad(-event.relative.y*mouse_sensitivity))
        head.rotation.x=clamp(head.rotation.x,deg2rad(-90),deg2rad(90))
func _process(delta):
    Vector3.ZERO
    if Input.is_action_pressed("mf"):
        direction-=transform.basis.z
    elif Input.is_action_pressed("b"):
        direction+=transform.basis.z
    direction=direction.normalized()
    move_and_slide(direction*speed,Vector3.UP)

我不知道我做错了什么。 释放一个键后,我的 kinematicBody 一直在移动。

解决方法

注意direction

var direction=Vector3.ZERO

# ...

func _process(delta):
    Vector3.ZERO
    if Input.is_action_pressed("mf"):
        direction-=transform.basis.z
    elif Input.is_action_pressed("b"):
        direction+=transform.basis.z
    direction=direction.normalized()
    move_and_slide(direction*speed,Vector3.UP)

它以 ZERO 开头。然后您按下已识别的输入之一,并对其进行修改。输入之后不再是 ZERO

当然,_process 的后续执行不会进入您修改 direction 的分支。然而,direction 保留了它的价值。

无论输入如何,此行都会运行:

move_and_slide(direction*speed,Vector3.UP)

directionZERO 时它不会移动。但同样,在第一个输入之后 direction 不再是 ZERO


我相信您打算将 direction = Vector3.ZERO 写为 _process 的第一行。

我提醒你注意你的警告:

  • 您没有使用 delta。可能意味着代码不会补偿帧速率的变化。
  • 你是一个独立的表达式 (Vector3.ZERO)。那什么都不做。你是想在那里做点什么吗?
  • 您正在丢弃 move_and_slide 的返回值。 老实说,我通常会告诉戈多忽略这个。

让您的脚本没有警告是一个好兆头。审查他们。如果您认为没有任何问题,您可以告诉 Godot 忽略它们(这可以通过注释 # warning-ignore:... 来完成。参见 GDScript warning system)。告诉 Godot 忽略警告会更容易在弹出新警告时注意到。


别的,我相信这段代码应该在 _physics_process 中。这是来自move_and_slide documentation

此方法应在 Node._physics_process(或 Node._physics_process 调用的方法)中使用,因为它会在计算中自动使用物理步骤的 delta 值。否则,模拟将以错误的速度运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。