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

Помочь со скриптом godot

Ivan Fresko Ученик (96), на голосовании 1 день назад
после убийств всех мобов у меня пропадает текст с хп
код текста "HP"ниже
extends Label


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


# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
text = "HP: " + str($"../../../player".health)
Голосование за лучший ответ
N N Мастер (1675) 1 месяц назад
Чтобы ваш скрипт в Godot корректно обновлял текст с HP после убийства всех мобов, убедитесь, что он продолжает вызываться и обновлять текст. Вам может понадобиться добавить условие, чтобы проверять состояние игры (например, количество оставшихся мобов). Вот пример того, как можно доработать ваш код:extends Label

# Объявление переменной для отслеживания статуса мобов
var mobs_alive: int = 0

# Called when the node enters the scene tree for the first time.
func _ready() -> void:
# Здесь вы можете установить mobs_alive на общее количество мобов
mobs_alive = get_tree().get_nodes_in_group("mobs").size()
update_hp_text()

# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
update_hp_text()

# Функция для обновления текста с HP
func update_hp_text() -> void:
text = "HP: " + str($"../../../player".health)

# Функция, которую вы можете вызывать при убийстве моба
func on_mob_killed() -> void:
mobs_alive -= 1
if mobs_alive <= 0:
# Здесь добавьте код, который будет выполняться, когда все мобы убиты
text = "Все мобы убиты!"

Переменная mobs_alive: Вы отслеживаете количество оставшихся мобов. Установите ее значение в методе _ready(), используя get_tree().get_nodes_in_group("mobs"), где вы можете добавить всех мобов в группу "mobs".

Метод update_hp_text(): Этот метод обновляет текст с HP игрока, вы можете вызывать его в _process() и после убийства моба.

Метод on_mob_killed(): Этот метод следует вызывать каждый раз, когда моб убивается. Он уменьшает счетчик оставшихся мобов и проверяет, остались ли они.
Ivan FreskoУченик (96) 1 месяц назад
не заработал
Артём Таптыков Просветленный (24361) 1 месяц назад
В вашем скрипте, судя по описанию, текст с показателем здоровья пропадает после того, как все мобы уничтожены. Это может происходить по нескольким причинам, и для решения проблемы нужно рассмотреть несколько вариантов:

### 1. **Проблема с объектом игрока**
Если после уничтожения всех мобов исчезает и сам объект игрока (`player`), то логика обновления здоровья больше не может происходить, так как ссылка на объект игрока пропадает. Необходимо убедиться, что объект игрока продолжает существовать даже после окончания боя.

### 2. **Проверка на наличие игрока**
Вы можете добавить проверку на существование объекта игрока, чтобы предотвратить ошибки, если объект будет удалён. Для этого перед обновлением текста можно проверить, существует ли ссылка на игрока.

Попробуйте модифицировать ваш скрипт следующим образом:
 extends Label 

# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
var player = $"../../../player" # Получаем игрока
if player: # Проверяем, существует ли игрок
text = "HP: " + str(player.health) # Обновляем текст с хп
else:
text = "HP: N/A" # Если игрока нет, например, после его удаления
### 3. **Проверка логики уничтожения мобов**
Вам нужно убедиться, что уничтожение мобов не затрагивает объект игрока или его данные о здоровье. Если после уничтожения всех мобов происходит, например, смена сцены, и игрок перестаёт существовать в дереве сцен, это также может объяснять, почему текст пропадает.

### 4. **Обработка конца боя**
Если у вас есть логика, связанная с концом боя (например, удаление объектов или смена интерфейса), проверьте, чтобы она не влияло на отображение здоровья. Например, можно после уничтожения всех мобов не удалять интерфейс или текстовое поле HP, а просто остановить его обновление.

### 5. **Дебаг и логирование**
Для лучшего понимания проблемы можете добавить вывод в консоль состояния игрока и его здоровья:
 extends Label 

func _process(_delta: float) -> void:
var player = $"../../../player"
if player:
text = "HP: " + str(player.health)
print("Player HP:", player.health) # Лог здоровья игрока
else:
text = "HP: N/A"
print("Player not found") # Лог отсутствия игрока
Этот код поможет вам понять, на каком этапе пропадает объект игрока или его здоровье, и что происходит с отображением текста.

Попробуйте эти советы и протестируйте игру ещё раз.
Похожие вопросы