我试着玩一个游戏使用戈多引擎,但我被困在一开始!我KinematicBody2D动不了了!
这是我的Player.GD脚本
extends KinematicBody2D
var velocity = Vector2.ZERO
var move_speed = 480
var gravity = 1200
var jump_force = -720
var right = Input.is_action_pressed("move_right")
var left = Input.is_action_pressed("move_left")
var jump = Input.is_action_pressed("jump")
func _ready():
pass
func _physics_process(_delta):
var move_direction = int(right) - int(left)
velocity.x = move_speed * move_direction
move_and_collide(velocity)有人能帮帮我吗?
发布于 2022-04-22 03:25:30
当初始化KinematicBody2D时,所有这些代码都将运行:
var velocity = Vector2.ZERO
var move_speed = 480
var gravity = 1200
var jump_force = -720
var right = Input.is_action_pressed("move_right")
var left = Input.is_action_pressed("move_left")
var jump = Input.is_action_pressed("jump")因此,它将不会接受实时输入。相反,您需要最后三行:
func _physics_process(_delta):
var right = Input.is_action_pressed("move_right")
var left = Input.is_action_pressed("move_left")
var jump = Input.is_action_pressed("jump")
# …顺便说一下,这些都是布尔型的。如果使用float,则可以从0.0获得一个从Input.get_action_strength到1.0的Input.get_action_strength。这也会让你的代码为模拟输入做准备。
我还想指出的是,move_and_collide不是速度,而是位移矢量。因此,要正确地调用它,您需要将速度乘以增量:
func _physics_process(delta):
# …
move_and_collide(velocity * delta)或者使用move_and_slide,它确实需要一个速度。顺便说一句,up参数move_and_slide采用的是区分地板,天花板和墙壁。没有,一切都被认为是一堵墙。
https://stackoverflow.com/questions/71963102
复制相似问题