Привет, маленький top-down шутер для учебного проекта, Godot 4. Две проблемы, может один баг, может два.
1. Бомба. Игрок подбирает бомбу, она вызывает kill_all() на менеджере волн. Из 10 врагов умирают только 5. Остальные 5 остаются, и волна никогда не заканчивается. Я вывожу alive_enemies.size() до и после бомбы. До пишет 10, после пишет 5. Я думаю, может бомба срабатывает не в то время в кадре, поэтому пробую call_deferred на ней. Всё равно непонятно. В моём старом проекте на Godot 3 такой цикл работал нормально.
func kill_all() -> void:
for e in alive_enemies:
e.take_damage(9999)
func _on_enemy_died(enemy: Enemy) -> void:
alive_enemies.erase(enemy)
score += 10
take_damage вызывает сигнал died, потом queue_free().
2. Движение. Я двигаю игрока в _process, потому что хочу плавно:
func _process(delta: float) -> void:
var dir := Input.get_vector("move_left", "move_right", "move_up", "move_down")
velocity = dir * speed
move_and_slide()
С моим ноутбуком всё нормально. Друг с монитором 144 Гц говорит, что игрок быстрее и застревает на углу стены.
Это тайминг кадров для обоих случаев? Или два разных бага?