Загрузка...

Подскажите почему враг не двигается до плеера в годо

Тема в разделе Python создана пользователем misharoman 18 фев 2025. 102 просмотра

  1. misharoman
    misharoman Автор темы 18 фев 2025 3 18 апр 2022
    extends CharacterBody2D

    var maxspeed = 80

    # Called when the node enters the scene tree for the first time.
    func _ready() -> void:
    pass

    # Called every frame. 'delta' is the elapsed time since the previous frame.
    func _process(delta):
    var direction = get_directionToLayer()
    velocity = maxspeed * direction # Присваиваем новое значение velocity
    move_and_slide() # move_and_slide автоматически использует velocity

    # Получаем направление к игроку
    func get_directionToLayer() -> Vector2:
    var player = get_tree().get_first_node_in_group("player") as Node2D
    if player != null:
    # Направление к игроку
    return (player.position - position).normalized()
    return Vector2(0, 0) # Если игрок не найден, не двигаемся
     
  2. 525
    525 18 фев 2025 Заблокирован(а)
    исправленный код
    Код
    extends CharacterBody2D

    var maxspeed = 80
    var velocity = Vector2() # Инициализируем переменную для хранения текущей скорости

    # Called when the node enters the scene tree for the first time.
    func _ready() -> void:
    pass

    # Called every frame. 'delta' is the elapsed time since the previous frame.
    func _process(delta):
    var direction = get_directionToLayer()
    velocity = direction * maxspeed # Присваиваем новое значение velocity, корректируя направление и скорость
    move_and_slide(velocity) # Передаем в move_and_slide актуальное значение скорости

    # Получаем направление к игроку
    func get_directionToLayer() -> Vector2:
    var player = get_tree().get_first_node_in_group("player") as Node2D
    if player != null:
    # Направление к игроку
    return (player.position - position).normalized()
    return Vector2(0, 0) # Если игрок не найден, не двигаемся
     
    1. 525
      525, Ошибка в том, что ты напрямую присваиваешь вектор velocity в move_and_slide, не учитывая, что velocity должен быть объектом типа Vector2, который должен обновляться в каждом кадре. Также не учитывается возможная текущая скорость, из-за чего враг может двигаться рывками. Нужно правильно передавать и обновлять velocity для плавного движения.
    2. misharoman Автор темы
      525, все равно
  3. NingaGo
    NingaGo 18 фев 2025 44 9 фев 2024
    Все бы ничего, но это не python :)
     
    1. misharoman Автор темы
      NingaGo, раздела для годо нету,а пайтон близок к гдскрипту
  4. kernel_32
    kernel_32 19 фев 2025 15 17 июл 2019
    Проси чатжпт чтоб он искал в инете когда через него генеришь код, у него база по старой версии. И у тебя там для версии 4.3 явно ошибка, там move_and_slide без параметров вызывается. Просто устанавливаешь значение velocity или linear_velocity и вызываешь внутри _physics_process move_and_slide
     
    19 фев 2025 Изменено
Top
Загрузка...