SWIFT SpriteKit: Как я могу использовать свойство userData SKnode, чтобы уменьшить значение ключа внутри него? - PullRequest
0 голосов
/ 26 июня 2018

Привет всем (впервые задаю вопрос здесь!),

В настоящее время я пытаюсь использовать свойство "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 метеор взорвался.

Спасибо за быстрый ответ (понимаете?

...