Я пытался добавить контакт делегата на мой GameScene:Почему SKPhysicsContactDelegate на отдельный класс не вызывается
self.physicsWorld.contactDelegate = ContactManager()
Однако, я делаю это, имея контакт делегата (ContactManager класс) на отдельный класс, чтобы не иметь столько кода на моей GameScene. Это мой контакт делегат:
class ContactManager : NSObject, SKPhysicsContactDelegate {
func didBegin(_ contact: SKPhysicsContact) {
print("they touched!")
}
}
Проблема заключается в том, что, когда объект 1 сталкивается с объектом 2 не запускается метод didBegin(). Однако я знаю, что проблема не в битах, потому что я сделал GameScene наследованием SKPhysicsContactDelete и установил делегат для себя, а метод didBegin() работал. Поэтому проблема заключается в том, что класс ContactManager() не правильно связывается, как я могу убедиться, что менеджер контактов в отдельном классе из GameScene работает?
ничего не сохраняет 'ContactManager' так, как только вы выходите из функции, становится нулевой – Knight0fDragon
вам нужна глобальная переменная в вашей сцене:' частный пусть ContactManager = ContactManager() ' , затем установите 'self.physicsWorld.contactDelegate = contactManager' – Knight0fDragon
Только один объект может быть установлен как делегат мира физики. Поэтому, если вы установите self.physicsWorld.contactDelegate = contactManagerInstance, а позже в своем коде вы снова установите его на себя (где self - это сцена), только сцена получит оповещения о контактах. Таким образом, вы можете либо прослушивать сцену для контактов, либо ContactManager. Так что в основном делайте то, что сказал Knight0fDragon, создайте свойство и назначьте его делегатом-контактом. – Whirlwind