Годо Input.is_action_pressed не работает - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь создать базового c бесконечного бегуна, однако мой персонаж не прыгает, Код:

extends KinematicBody2D

#movement speed
const SPEED = 200
const GRAVITY = 10
const JUMP_POWER = -250
const FLOOR = Vector2(0, -1)

var velocity = Vector2()

func _physics_process(delta):
    velocity.x = SPEED

    if Input.is_action_just_pressed("ui-up"):
        velocity.y = -250
        print("jumped")
    velocity.y += GRAVITY

    velocity = move_and_slide(velocity, FLOOR)

Персонаж движется вправо непрерывно, как и положено, и гравитация работает нормально. Даже если я удалю условие: if Input.is_action_just_pressed("ui-up"):, механизм прыжка c работает и персонаж плавает. Помимо этого, я удалил velocity.x = SPEED, чтобы увидеть, была ли проблема в этом, а это не так. Я проверил карту ввода, чтобы убедиться, что пробел и клавиша со стрелкой вверх привязаны к «ui-up», и они оба. Никаких ошибок не происходит, поэтому единственное, о чем я могу думать, это то, что условие по какой-то причине никогда не истинно. Я действительно не понимаю, почему это не работает, и буду признателен за любую помощь.

1 Ответ

1 голос
/ 17 июня 2020

Вероятный источник вашей проблемы - комбинация _physics_process и is_action_just_pressed. Не гарантируется, что _physics_process будет вызываться в каждом кадре, поэтому он может легко пропустить действие.

Лучшим решением было бы поймать скачок в _input, сохранить информацию о скачке в переменной уровня скрипта и затем посмотрите на эту переменную в _physics_process.

...