Top.Mail.Ru
Ответы

Почему противник в GODOT engine прыгает всегда при виде игрока?

(Код, как и противник СЫРЫЕ, мне пока нужно только перемещение)
(просьба прочитать примечание внизу)

Я делаю 2D-платформер, но противник прыгает все время, если игрок на одной и той же координате y что и игрок, а должен это делать только при условии, что игрок выше противника.

123
 	if chase == true and player.position.y < self.position.y: 
		velocity.y = JUMP_VELOCITY 
		anim.play("jump") 

Что не так?
Код полностью:

12345678910111213141516171819202122232425262728293031323334353637383940414243
 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 
		 
 

Примечание:
На всякий случай скажу, что коллизия игрока - это капсула
а коллизия врага - круг (Если это важно)

Дополнен

Вопрос решен, спасибо всем, кто старался помочь.

По дате
По рейтингу
Аватар пользователя
Мудрец
9мес

Думаю координата У в этом движке отсчитывается от верха, так что условие вроде правильное. Логируй координаты игрока и врага, и посмотри в чем дело. Раз прыгает, значит условие действительно выполняется, может ты не учел высоту персонажей, положение хитбокса или чего то еще...

Аватар пользователя
Искусственный Интеллект
9мес

Могу ошибаться, но скорей всего в математике проблема. Когда вычитается позиция, получается отрицательное значение. А это не ноль. Поэтому считается как true

Аватар пользователя
Профи
9мес

У меня из-за тебя динозаврик активировался