Я нахожусь в процессе создания игры в стиле космических захватчиков и хотел бы сделать так, чтобы во врага нужно было попасть три раза, прежде чем он взорвется.
В учебнике, который я использую, показано, как заставить врагов взорваться после одного удара. Он использует функцию под названием didBegin(_ contact: SKPhysicsContact)
https://www.youtube.com/watch?v=F0kcw6eryJs&t=617s
Насколько я понимаю, эта функция оценивает каждый случай контакта, назначает двум телам две разные роли, а затем решает, что делать с каждым телом. Я предполагаю, что если враг получит три удара, будет использоваться переменная, содержащая его оставшееся здоровье. Затем при каждом контакте переменная будет уменьшаться на единицу, пока, если она не станет равной нулю, враг не будет удален.
Однако в этом есть глубокая проблема. Поскольку didBegin(_ contact: SKPhysicsContact)
оценивает только один экземпляр контакта, ему ничего не известно о других предыдущих случаях контакта. По сути, когда враг получает удар, невозможно узнать, был ли он поражен раньше, вообще не был поражен или был поражен слишком много раз. Если бы был только один враг, я мог бы использовать одну переменную для отслеживания его здоровья. Однако это не так, поскольку на экране одновременно находится несколько врагов, и каждый раз, когда происходит контакт, невозможно узнать, был ли предыдущий удар по этому врагу или другому врагу.
Если на экране есть один враг, это просто, потому что каждый раз, когда происходит контакт, это должен быть один враг. Но если на экране несколько сущностей, то невозможно узнать, к какому врагу относится контакт.
Я считаю, что это потребует какой-то идентификации для каждого экземпляра врага, хотя я не знаю, как это сделать. Тем из вас, кто читает, большое спасибо за то, что зашли, и я очень благодарен, если вы можете помочь.