我创建了一个故事板并添加了一个带有两个按钮的场景。我无法弄清楚如何知道我的GameScene.swift类按下按钮的时间。
如何做到这一点?
答案 0 :(得分:3)
你可以为此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
}
}
}
答案 1 :(得分:1)
您似乎在这里混合了UIKit和SpriteKit。我个人建议不要将UIButtons与Sprite Kit结合使用。有这样做的具体原因吗?
有两种方法可以在Sprite Kit场景中实现按钮行为:
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
答案 2 :(得分:0)
您应该以编程方式(而不是IB)将UIButton
添加到SKScene
的{{1}}(例如SKView
中)。然后,您可以使用didMoveToView
设置按钮的目标。只需记住在button.addTarget:action:forControlEvents:
中拨打button.removeFromSuperview()
,否则您会在下一个场景中看到按钮。