godot - 如何在释放运动键时停止运动体行走?
问题描述
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)
direction
是时它不动ZERO
。但同样,第一次输入后direction
不再存在ZERO
。
我相信你的意思是写direction = Vector3.ZERO
为_process
.
我提醒您注意您的警告:
- 您没有使用
delta
. 可能意味着代码不会补偿帧速率的变化。 - 你是一个独立的表达式 (
Vector3.ZERO
)。那没有任何作用。你是不是想在那里做点什么? - 您正在丢弃 的返回值
move_and_slide
。老实说,我通常会告诉 Godot 忽略这一点。
让您的脚本没有警告是一个好兆头。审查他们。如果您认为没有任何问题,您可以告诉 Godot 忽略它们(这可以通过注释来完成# warning-ignore:...
。请参阅GDScript 警告系统)。告诉 Godot 忽略警告将在弹出新警告时更容易注意到。
别的,我相信这段代码应该在_physics_process
. 这是来自move_and_slide
文档:
此方法应在 Node._physics_process 中使用(或在 Node._physics_process 调用的方法中),因为它在计算中自动使用物理步骤的 delta 值。否则,模拟将以不正确的速度运行。
推荐阅读
- c# - 如何将复选框值从一个表单传递到另一个表单?
- javascript - 无法减小图像 div 的大小 - React Js,Tailwind
- python - sklearn.neural_network.MLPClassifier 中的损失函数
- redis - Redis中可以缓存DataSource对象吗
- material-ui - Material-UI v5 Datepicker - 扩展到其父级的全宽
- android-studio - 滚动 Android Studio 时 ListView 显示错误
- visual-studio - 如何公开我的 Visual Studio 市场 VSIX 扩展
- python - 为什么在使用 TextBlob 时会收到 HTTP 错误?
- c# - FastReports 右对齐问题
- sql-server - 使用 SSIS 将上次修改的 Azure 数据湖放入表列 SQL 中