Загрузка...

Tell me why the enemy does not move to the player in the year

Thread in Python created by misharoman Feb 18, 2025. 105 views

  1. misharoman
    misharoman Topic starter Feb 18, 2025 3 Apr 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
    исправленный код
    Code
    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 Topic starter
      525, все равно
  3. NingaGo
    NingaGo Feb 18, 2025 44 Feb 9, 2024
    Все бы ничего, но это не python :)
     
    1. misharoman Topic starter
      NingaGo, раздела для годо нету,а пайтон близок к гдскрипту
  4. kernel_32
    kernel_32 Feb 19, 2025 15 Jul 17, 2019
    Проси чатжпт чтоб он искал в инете когда через него генеришь код, у него база по старой версии. И у тебя там для версии 4.3 явно ошибка, там move_and_slide без параметров вызывается. Просто устанавливаешь значение velocity или linear_velocity и вызываешь внутри _physics_process move_and_slide
     
Top
Loading...