检测何时在 SKScene 中触摸按钮?
Detecting when a button is touched in SKScene?
我创建了一个故事板并添加了一个带有两个按钮的场景。我不知道如何知道 GameScene.swift class.
上的按钮何时被按下
如何做到这一点?
你可以touchesBegan
。
下面是适合您的示例代码:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches{
let location = touch.locationInNode(self)
if self.nodeAtPoint(location) == self.playButton{
//your code
}
}
}
您应该以编程方式而不是在 IB 中将 UIButton
添加到 SKScene
的 SKView
(例如在 didMoveToView
中)。然后,您可以使用 button.addTarget:action:forControlEvents:
设置按钮的目标。请记住在 willMoveFromView
中调用 button.removeFromSuperview()
否则您将在下一个场景中看到按钮。
您似乎在此处混合了 UIKit 和 SpriteKit。我个人建议不要将 UIButtons 与 Sprite Kit 结合使用。这样做有特定的原因吗?
有两种方法可以在 Sprite Kit 场景中实现按钮行为:
- 让 SKScene 对象处理触摸
- 让按钮本身处理触摸
Dharmesh 的回答使用方法 (1),他在其中实现了 -touchesBegan
方法。
在我当前的项目中,我使用 SKNode 子类作为按钮 (2)。我不熟悉 Swift 语法,所以我从我的项目中发布了 Objective-C 代码。方法调用虽然相似,应该有助于说明这一点。
如果你想让一个SKNode接收触摸,将userInteractionEnabled
设置为YES
。否则,与userInteractionEnabled = YES
最近的祖先(通常是包含 SKScene 的)将收到 -touchesBegan
/-touchesMoved
/-touchesEnded
消息。
@interface VTObject : SKNode
@end
...
@implementation VTObject
- (instancetype)init {
if (self = [super init]) {
self.userInteractionEnabled = YES;
}
return self;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"button touched!");
}
@end
我创建了一个故事板并添加了一个带有两个按钮的场景。我不知道如何知道 GameScene.swift class.
上的按钮何时被按下如何做到这一点?
你可以touchesBegan
。
下面是适合您的示例代码:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches{
let location = touch.locationInNode(self)
if self.nodeAtPoint(location) == self.playButton{
//your code
}
}
}
您应该以编程方式而不是在 IB 中将 UIButton
添加到 SKScene
的 SKView
(例如在 didMoveToView
中)。然后,您可以使用 button.addTarget:action:forControlEvents:
设置按钮的目标。请记住在 willMoveFromView
中调用 button.removeFromSuperview()
否则您将在下一个场景中看到按钮。
您似乎在此处混合了 UIKit 和 SpriteKit。我个人建议不要将 UIButtons 与 Sprite Kit 结合使用。这样做有特定的原因吗?
有两种方法可以在 Sprite Kit 场景中实现按钮行为:
- 让 SKScene 对象处理触摸
- 让按钮本身处理触摸
Dharmesh 的回答使用方法 (1),他在其中实现了 -touchesBegan
方法。
在我当前的项目中,我使用 SKNode 子类作为按钮 (2)。我不熟悉 Swift 语法,所以我从我的项目中发布了 Objective-C 代码。方法调用虽然相似,应该有助于说明这一点。
如果你想让一个SKNode接收触摸,将userInteractionEnabled
设置为YES
。否则,与userInteractionEnabled = YES
最近的祖先(通常是包含 SKScene 的)将收到 -touchesBegan
/-touchesMoved
/-touchesEnded
消息。
@interface VTObject : SKNode
@end
...
@implementation VTObject
- (instancetype)init {
if (self = [super init]) {
self.userInteractionEnabled = YES;
}
return self;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"button touched!");
}
@end