Привет всем (впервые задаю вопрос здесь!),
В настоящее время я пытаюсь использовать свойство "userData" SkNode для отслеживания определенного значения. В приведенном ниже коде вывидно, что я создал узел вызова meteor и использую userData для определения словаря со значением "health" со значением 3.
meteor = SKSpriteNode(imageNamed: "Meteor")
meteor.name = "meteor"
meteor.userData = NSMutableDictionary()
meteor.userData = ["health" : 3]
Эта функция создает взрыв области, где бы я ни касался экрана
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for t in touches {
canonBlastProperties(atPoint: t.location(in: self))
cannonBlast(delay: 0.001)
}
}
Эта функция позволяет установить контакт между взрывом области и метеором, который я создал, и с этим у меня тоже есть проблема.
func didBegin(_ contact: SKPhysicsContact) {
var firstBody, secondBody: SKPhysicsBody
if contact.bodyA.node?.name == "meteor" {
firstBody = contact.bodyA
secondBody = contact.bodyB
}
else
{
firstBody = contact.bodyB
secondBody = contact.bodyA
}
if firstBody.node?.name == "meteor" && secondBody.node?.name == "blast" {
firstBody.node?.userData?[.value(forKey: "health")] -= 1
// score += meteorScore
print("Detected Contact")
}
}
Точнее, эта линия здесьэто где у меня есть проблема.Технически я пытаюсь уменьшить конкретное «здоровье» Метеора на 1 каждый раз, когда он вступает в контакт с областью Взрыв, когда вы касаетесь экрана.
firstBody.node?.userData?[.value(forKey: "health")] -= 1
Теперь SWIFT дает мне эту ошибку
Binary operator '-=' cannot be applied to operands of type 'Any?' and 'Int'
Итак, что я понимаю из этой ошибки, исправьте меня, если я ошибаюсь, Swift не позволит мне уменьшить значение «здоровья», потому что оно имеет тип «Любой?".
Так что я пытаюсь принудительно разыграть Тип" Любой? "в "Int". Получил еще одну ошибку от этого.
Я, кажется, другие люди с подобной проблемой, но ответ, который они получили, не может действительно относиться к моей проблеме.
Я знаю userDataиспользуется для хранения данных в определенных узлах (я прочитал документацию по swift)
Я просто хочу уменьшить значение VALUE ключа в моем словаре, чтобы при достижении 0 метеор взорвался.
Спасибо за быстрый ответ (понимаете?