【问题标题】:Detecting when a button is touched in SKScene?检测何时在 SKScene 中触摸按钮?
【发布时间】:2015-04-04 03:32:53
【问题描述】:

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

如何做到这一点?

【问题讨论】:

标签: xcode swift sprite-kit skscene


【解决方案1】:

你可以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
        }
    }
}

【讨论】:

    【解决方案2】:

    您似乎在这里混合了 UIKit 和 SpriteKit。我个人建议不要将 UIButtons 与 Sprite Kit 结合使用。这样做有什么具体原因吗?

    有两种方法可以在 Sprite Kit 场景中实现按钮行为:

    1. 让 SKScene 对象处理触摸
    2. 让按钮自己处理触摸

    Dharmesh 的答案使用方法 (1),他在其中实现了 -touchesBegan 方法。 在我当前的项目中,我使用 SKNode 子类作为按钮 (2)。我不熟悉 Swift 语法,所以我从我的项目中发布了 Objective-C 代码。方法调用虽然相似,但应该有助于说明这一点。

    如果您希望 SKNode 接收触摸,请将 userInteractionEnabled 设置为 YES 否则,与 userInteractionEnabled = YES 最接近的祖先(通常是包含 SKScene)将收到 @987654325 @/-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
    

    【讨论】:

      【解决方案3】:

      您应该以编程方式而不是在 IB 中将 UIButton 添加到 SKSceneSKView(例如在 didMoveToView 中)。然后,您可以使用button.addTarget:action:forControlEvents: 设置按钮的目标。请记住在willMoveFromView 中调用button.removeFromSuperview(),否则您会在下一个场景中看到这些按钮。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多