1

我正在构建一个 SpriteKit 游戏。游戏场景是其上方透明层的父级,其作用是向玩家显示偶尔的消息。我希望这个层在大多数情况下都是透明的和惰性的,当然,永远不要被触摸。因此,我将 isUserInteractionEnabled 设置为 false。但是,当我稍后将其添加到场景中时,它会阻止其下方的所有触摸。是什么赋予了?

编辑:MessageLayer 的父级是游戏场景,游戏场景也有 isUserInteractionEnabled = false,所以我不相信 MessageLayer 是在继承行为。

这是我的代码:

import Foundation
import SpriteKit

class MessageLayer: SKSpriteNode {

    init() {

        let size = CGSize(width: screenWidth, height: screenHeight)
        super.init(texture: nil, color: UIColor.blue, size: size)
        self.isUserInteractionEnabled = false

        self.name = "MessageLayer"
        alpha = 0.6
        zPosition = +200
    }

    override init(texture: SKTexture!, color: UIColor, size: CGSize)
    {
        super.init(texture: texture, color: color, size: size)
    }

    required init(coder aDecoder: NSCoder) {
        super.init(texture: nil, color: UIColor.clear, size: CGSize(width: 100, height: 100))
    }

    // MARK: - Functions

    func alphaUp() {
        alpha = 0.6
    }

    func alphaDown() {
        alpha = 0.0
    }

}
4

1 回答 1

0

只需将触摸传递到您想要处理的场景/其他节点。

class TransparentNode: SKSpriteNode {

  init(color: SKColor = .clear, size: CGSize) {
    super.init(texture: nil, color: color, size: size)
    isUserInteractionEnabled = true
  }

  // touches began on ios:
  override func mouseDown(with event: NSEvent) {
    // relay event to scene:
    scene!.mouseDown(with: event)
  }

  required init?(coder aDecoder: NSCoder) { fatalError() }
}


class GameScene: SKScene {

  lazy var transparentNode: SKSpriteNode = MyNode(size: self.size)

  // touches began on ios:
  override func mouseDown(with event: NSEvent) {
    print("ho")
  }

  override func didMove(to view: SKView) {
    addChild(transparentNode)
    isUserInteractionEnabled = false
  }
}

在这里您可以看到不可见节点正在正确发送事件:

在此处输入图像描述

于 2017-10-30T00:14:07.987 回答