检测SKScene中触摸按钮的时间?

时间:2015-04-04 03:32:53

标签: xcode swift sprite-kit skscene

我创建了一个故事板并添加了一个带有两个按钮的场景。我无法弄清楚如何知道我的GameScene.swift类按下按钮的时间。

如何做到这一点?

enter image description here

3 个答案:

答案 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场景中实现按钮行为:

  1. 让SKScene对象处理触摸
  2. 让按钮本身处理触摸
  3. 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(),否则您会在下一个场景中看到按钮。