watchOS 3 SpriteKit 中的 TouchEvents?
TouchEvents in watchOS 3 SpriteKit?
在watchOS 3中使用SpriteKit时,如何处理触摸事件?我正在从 iOS 移植 SpriteKit 游戏,下面的代码将不起作用。或者你必须以某种方式控制 WKInterfaceController?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {}
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {}
在对同一个问题感到很沮丧之后,我最终使用了手势识别器,并从那里计算出位置。
@IBAction func handleSingleTap(tapGesture: WKTapGestureRecognizer) {
let location = tapGesture.locationInObject()
if yourSpriteNodeRect.contains(location) {
//do stuff
}
}
不过有个提示:我在创建处理手势识别器的方法时发现了一个奇怪的错误,即默认情况下手势没有传递到方法中。我必须按 ctrl + 拖动来创建方法,然后修改签名以包含手势。如果我使用签名中的手势创建方法,Xcode 将不允许我将手势识别器附加到它。
似乎有更好的方法来检测触摸,但这是我目前找到的解决方法。
要获得接近触地事件的东西,请使用具有超短持续时间 (0.001) 的 WKLongPressGestureRecognizer。连接到该识别器的 IBAction 将几乎立即获得触地事件。该位置位于识别器的 locationInObject 属性 中。如果目标是移动触摸,请使用平移识别器。
为此,我首先在手表情节提要中连接了一个手势识别器。创建了一个 IBAction
,然后在传入 gesture.locationInObject()
的 SpriteKit 场景上调用了一个方法。然后在转换的场景方法中,这里有一些代码。
let screenBounds = WKInterfaceDevice.current().screenBounds
let newX = ((location.x / screenBounds.width) * self.size.width) - (self.size.width / 2)
let newY = -(((location.y / screenBounds.height) * self.size.height) - (self.size.height / 2))
newX和newY是场景中的触摸坐标。
在watchOS 3中使用SpriteKit时,如何处理触摸事件?我正在从 iOS 移植 SpriteKit 游戏,下面的代码将不起作用。或者你必须以某种方式控制 WKInterfaceController?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {}
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {}
在对同一个问题感到很沮丧之后,我最终使用了手势识别器,并从那里计算出位置。
@IBAction func handleSingleTap(tapGesture: WKTapGestureRecognizer) {
let location = tapGesture.locationInObject()
if yourSpriteNodeRect.contains(location) {
//do stuff
}
}
不过有个提示:我在创建处理手势识别器的方法时发现了一个奇怪的错误,即默认情况下手势没有传递到方法中。我必须按 ctrl + 拖动来创建方法,然后修改签名以包含手势。如果我使用签名中的手势创建方法,Xcode 将不允许我将手势识别器附加到它。
似乎有更好的方法来检测触摸,但这是我目前找到的解决方法。
要获得接近触地事件的东西,请使用具有超短持续时间 (0.001) 的 WKLongPressGestureRecognizer。连接到该识别器的 IBAction 将几乎立即获得触地事件。该位置位于识别器的 locationInObject 属性 中。如果目标是移动触摸,请使用平移识别器。
为此,我首先在手表情节提要中连接了一个手势识别器。创建了一个 IBAction
,然后在传入 gesture.locationInObject()
的 SpriteKit 场景上调用了一个方法。然后在转换的场景方法中,这里有一些代码。
let screenBounds = WKInterfaceDevice.current().screenBounds
let newX = ((location.x / screenBounds.width) * self.size.width) - (self.size.width / 2)
let newY = -(((location.y / screenBounds.height) * self.size.height) - (self.size.height / 2))
newX和newY是场景中的触摸坐标。