好的,我不熟悉 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/