2015-09-19 10 views
5

Ich versuche auf eine Presse in einer Unterklasse von SKScene zu reagieren. Ich kann den response presssEnded in meinem ViewController außer Kraft setzen, aber wenn ich meine pressEnded override in meine SKScene-Unterklasse verschiebe, erhalte ich keine Anrufe mehr.tvOS UIPressgesten werden in der Unterklasse von SKScene nicht erkannt

Unten ist mein pressesEnabled Überschreibung, die innerhalb von Viewcontroller wie vorgesehen funktioniert

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    print("press") 
} 

Jeder weiß, wie Tastendrücke innerhalb eines SKScene zu erhalten?

+0

Ist SKScene Ersthelfer? – jtbandes

+0

Es ist nicht, aber es kann erwähnenswert sein, dass alle Berührungsereignisse getroffen werden. –

+0

Funktioniert es, wenn Sie es Ersthelfer machen? Können Sie in den Touch-Ereignishandlern einen Haltepunkt setzen, um den Stack-Trace zu sehen/wie er an die Szene weitergeleitet wird? – jtbandes

Antwort

7

Sie benötigen Pressetermine von Ihrem Viewcontroller zum SKScene weiterleiten, wie so ...

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    gameScene.pressesBegan(presses, withEvent: event) 
} 

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    gameScene.pressesEnded(presses, withEvent: event) 
} 

dann in gameScene (SKScene) so etwas wie:

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    for press in presses { 
    switch press.type { 
    case .UpArrow: 
     print("Up Arrow") 
    case .DownArrow: 
     print("Down arrow") 
    case .LeftArrow: 
     print("Left arrow") 
    case .RightArrow: 
     print("Right arrow") 
    case .Select: 
     print("Select") 
    case .Menu: 
     print("Menu") 
    case .PlayPause: 
     print("Play/Pause") 
    } 
    } 
} 

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    print("Presses Ended.") 
} 

Die „Pfeil "Drücken wird gesendet, wenn der Benutzer die Kanten des Touchpads berührt, aber nicht im Simulator erkannt wird. "Select" wird gesendet, wenn die Mitte des Touchpads angetippt wird.

Ich hoffe, das hilft!

+0

Dies ist, was ich vorerst tun werde, aber wenn die zugehörigen Pressenfunktionen in der Superklasse SKScene enthalten sind, ist das nicht ein Hinweis darauf, dass die zugehörigen Funktionen irgendwo innerhalb von tvOS verwendet werden? –

1

Verwenden Sie pressesBegan, um eine physische Schaltfläche (Menü, PlayPause) und pressesBegan oder pressesEnded für das Trackpad der Apple TV Remote (links, rechts usw.) zuzuordnen. Wenn Sie auf einen "Knopf" des Trackpads drücken und an einen anderen Ort gehen und loslassen, wird die Methode pressesEnded nicht aufgerufen, Sie können dies nicht mit einer physischen Schaltfläche tun.

Pressen Begann:

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
     print("Press began") 
     for item in presses { 
      if item.type == .PlayPause { 
        print("PlayPause") 
      } 
     } 
} 

Pressen Ended:

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
     print("Press Ended") 
     for item in presses { 
      if item.type == .RightArrow { 
       print("Right Arrow") 
      } 
     } 
    } 
Verwandte Themen