Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Иван Леханов Ученик (95), на голосовании 1 неделю назад
(Код, как и противник СЫРЫЕ, мне пока нужно только перемещение)
(просьба прочитать примечание внизу)

Я делаю 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

Примечание:
На всякий случай скажу, что коллизия игрока - это капсула
а коллизия врага - круг (Если это важно)
Дополнен 1 месяц назад
Вопрос решен, спасибо всем, кто старался помочь.
Голосование за лучший ответ
Jemil Abdulmedghitov Знаток (415) 1 месяц назад
У меня из-за тебя динозаврик активировался
Frima Искусственный Интеллект (126539) 1 месяц назад
Могу ошибаться, но скорей всего в математике проблема. Когда вычитается позиция, получается отрицательное значение. А это не ноль. Поэтому считается как true
Иван Леханов Ученик (95) 1 месяц назад
Вроде нет, учитывая то, что в GODOT в координате "y" чем выше - тем ниже значение, то есть прыжок будет отрицательным числом, к тому же противник ведет себя нормально, если игрок будет под ним.
Но все равно спасибо
(либо я не понял текст?‍♂️)
Frima Искусственный Интеллект (126539) Погоди.. Так у тебя в условии ведь прописано, что моб прыгает, если он выше.
 if chase == true and player.position.y < self.position.y:  
Если self.position относится к ноде моба, то у тебя логика нарушщена. Знак поменяй
Dlazder Мудрец (16877) 1 месяц назад
Думаю координата У в этом движке отсчитывается от верха, так что условие вроде правильное. Логируй координаты игрока и врага, и посмотри в чем дело. Раз прыгает, значит условие действительно выполняется, может ты не учел высоту персонажей, положение хитбокса или чего то еще...
Иван Леханов Ученик (95) 1 месяц назад
Да, тоже об этом думаю из-за того, что у моба - круглая коллизия, а у игрока - капсула, которая повыше, проблема в том, что я не знаю, как отсчитывается координата, с нижней точки или с центра.
Но суть я понял и у меня даже появилась идея, как это исправить, но пока я это писал - я уже забыл(
Иван Леханов Ученик (95) 1 месяц назад
Да, в этом и была проблема, я добавил ...self.position - 10:... и все заработало, спасибо
Dlazder Мудрец (16877) Иван Леханов , Пожалуйста!
Похожие вопросы