ios - Swift3 中的 SKScene 和 URLQueryItems?

标签 ios swift swift3 sprite-kit imessage-extension

好的,我不熟悉 URL 查询和 Swift 的这整个方面,需要帮助。照原样,我有一个 iMessage 应用程序,其中包含 SKScene .对于轮流玩游戏的用户,我需要在 1 个 session 中来回发送游戏消息,正如我在此处了解到的:https://medium.com/lost-bananas/building-an-interactive-imessage-application-for-ios-10-in-swift-7da4a18bdeed .

到目前为止,我的场景都在工作,但是我已经在 Apple 的冰淇淋演示中倾倒了他们来回发送连续构建的冰淇淋,我无法理解如何“查询”我的 SKScene 中的所有内容。这样我就可以发送场景了。

我不清楚如何 URLQueryItem它的工作是因为文档与 sprite 套件场景无关。

Apple 像这样查询当前状态下的“冰淇淋”:

    init?(queryItems: [URLQueryItem]) {
            var base: Base?
            var scoops: Scoops?
            var topping: Topping?

            for queryItem in queryItems {
                guard let value = queryItem.value else { continue }

                if let decodedPart = Base(rawValue: value), queryItem.name == Base.queryItemKey {
                    base = decodedPart
                }
                if let decodedPart = Scoops(rawValue: value), queryItem.name == Scoops.queryItemKey {
                    scoops = decodedPart
                }
                if let decodedPart = Topping(rawValue: value), queryItem.name == Topping.queryItemKey {
                    topping = decodedPart
                }
            }

            guard let decodedBase = base else { return nil }

            self.base = decodedBase
            self.scoops = scoops
            self.topping = topping
        }
    }

fileprivate func composeMessage(with iceCream: IceCream, caption: String, session: MSSession? = nil) -> MSMessage {
        var components = URLComponents()
        components.queryItems = iceCream.queryItems

        let layout = MSMessageTemplateLayout()
        layout.image = iceCream.renderSticker(opaque: true)
        layout.caption = caption

        let message = MSMessage(session: session ?? MSSession())
        message.url = components.url!
        message.layout = layout

        return message
    }
}

但我找不到如何“查询”SKScene 的方法.我怎样才能“发送” SKScene来回?这可能吗?

最佳答案

您不需要来回发送 SKScene :) 您需要做的是发送与您的游戏设置相关的信息 - 例如回合数或轮到谁,或其他任何信息,作为您的应用程序可以在另一端访问以构建场景的信息。

如果不进一步了解您的场景是如何设置的,以及它如何与其他玩家 session 收到的信息交互,我无法告诉您很多细节。但是,如果您使用 URLQueryItem 传递信息,您需要做的是,只需检索场景中的查询项列表并根据接收到的值设置场景。

如果您有关于如何做到这一点的具体问题,如果您分享完整的项目,或者发布有关您从一个玩家发送消息的位置以及另一个玩家如何接收信息的相关代码,以及设置场景,我(或其他人)应该能够提供帮助。

此外,如果您查看上面发布的代码中的 composeMessage,您将看到在该特定代码示例中场景/游戏信息是如何发送给其他用户的。在该过程的另一端,接收到的消息的 URL 参数将被分解以获取各种查询项的值,然后将根据这些值设置场景。看看这是如何完成的,以便弄清楚您的场景应该如何设置。

关于ios - Swift3 中的 SKScene 和 URLQueryItems?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43312035/

相关文章:

ios - 将字符串转换为日期仅在下午时间返回 nil

Swift HTTP POST 登录验证

swift3 - 覆盖 Swift 和 SpriteKit 中类的开放变量以在 XCode 的 ActionEditor 中使用

ios - 在cocoapods中加载resource_bundle错误

ios - 快速保存和检索 UserDefaults 中的自定义对象

ios - 从 objective-c 调用 swift 代码时,第一次推送 View Controller 花费了太多时间

swift - 如何在场景中放置场景 - Sprite Kit

android - iOS能像安卓一样接收广播吗?

ios - UICollectionView 水平滚动 - 单元格排列成列而不是行

arrays - Swift 3 - 将数组中的字典从 JSON 传递给另一种方法