Почему противник в GODOT engine прыгает всегда при виде игрока?
(Код, как и противник СЫРЫЕ, мне пока нужно только перемещение)
(просьба прочитать примечание внизу)
Я делаю 2D-платформер, но противник прыгает все время, если игрок на одной и той же координате y что и игрок, а должен это делать только при условии, что игрок выше противника.
if chase == true and player.position.y < self.position.y:
velocity.y = JUMP_VELOCITY
anim.play("jump")
Что не так?
Код полностью:
extends CharacterBody2D
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
var chase = false
var speed = 100
const JUMP_VELOCITY = -200.0
@onready var anim = $AnimatedSprite2D
func _physics_process(delta: float) -> void:
if not is_on_floor():
velocity += get_gravity() * delta
var player = $"../../player/player"
var direction = (player.position - self.position).normalized()
if chase == true:
velocity.x = direction.x * speed
anim.play("run")
else:
velocity.x = 0
anim.play("idle")
if chase == true and player.position.y < self.position.y:
velocity.y = JUMP_VELOCITY
anim.play("jump")
if direction.x < 0:
$AnimatedSprite2D.flip_h = false
else:
$AnimatedSprite2D.flip_h = true
move_and_slide()
func _on_detect_body_entered(body):
if body.name == "player":
chase = true
func _on_detect_body_exited(body):
if body.name == "player":
chase = false
Примечание:
На всякий случай скажу, что коллизия игрока - это капсула
а коллизия врага - круг (Если это важно)
Вопрос решен, спасибо всем, кто старался помочь.
Думаю координата У в этом движке отсчитывается от верха, так что условие вроде правильное. Логируй координаты игрока и врага, и посмотри в чем дело. Раз прыгает, значит условие действительно выполняется, может ты не учел высоту персонажей, положение хитбокса или чего то еще...
Могу ошибаться, но скорей всего в математике проблема. Когда вычитается позиция, получается отрицательное значение. А это не ноль. Поэтому считается как true
У меня из-за тебя динозаврик активировался