2017-10-27 11 views
1

私はSpriteKitゲームを構築しています。ゲームシーンは、その上にある透明なレイヤーの親です。このレイヤーは、時折のメッセージをプレイヤーに表示する役割を果たします。私はこの層を透明で不活性なものにしたいと思っています。もちろん、タッチは決して受けません。そのため、私はisUserInteractionEnabledをfalseに設定しました。しかし、後でこれをシーンに追加すると、その下のすべてのタッチがブロックされます。何がありますか?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 
    } 

} 
+0

あなたのゲームシーンもfalseに設定されている場合、あなたはタッチを受信して​​いる何を期待していますか? – Knight0fDragon

+0

@ Knight0fDragonシーンをfalseに設定すると、他のオブジェクトはまだタッチを受け取ります。これらはビューレイヤーで処理されます。彼らは、カスタム分類されている場合にのみ – Fluidity

+0

@Fluidityは、それは私がKnight0fDragon @私の質問 – Knight0fDragon

答えて

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 
    } 
} 

そして、ここで、あなたは目に見えないノードが適切にイベントを送信していることがわかります。

enter image description here

+0

あなたはKnight0fDragon @ MacOSの、ここでのiOS – Knight0fDragon

+0

を混合しているだけのコメント約touchesBegan:Pも同じです – Fluidity

+0

OPはおそらく決してmacOSコードに触れていない、それらに混乱している可能性があります – Knight0fDragon

関連する問題