2015-09-19 17 views
5

Próbuję odpowiedzieć na prasie w podklasie SKScene. Mogę przesłonić wciśniętym przyciskami. Wewnątrz mojego kontrolera ViewController wszystko jest w porządku, ale kiedy przeniosę moje wyciśnięcia "Przerobiłem" na moją podkategorię SKScene, nie będę już odbierać żadnych połączeń.tvOS UIPress gesty nie są rozpoznawane w podklasie SKScene

Poniżej jest moje pressesEnabled przesłanianie, który działa zgodnie z przeznaczeniem wewnątrz ViewController

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

ktoś wie jak odbierać naciśnięcia przycisków wewnątrz SKScene?

+0

Czy pierwszy responder SKScene? – jtbandes

+0

Nie jest, ale warto zauważyć, że wszystkie wydarzenia dotykowe są trafione. –

+0

Czy to działa, jeśli wykonujesz go jako pierwszy? Czy możesz ustawić punkt przerwania wewnątrz procedur obsługi zdarzeń dotyku, aby zobaczyć ślad stosu/sposób, w jaki są przesyłane dalej do sceny? – jtbandes

Odpowiedz

7

Trzeba przekazania wydarzeń prasowych z ViewController do SKScene, tak jak ...

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

Następnie w gameScene (SKScene) zrobić coś takiego:

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.") 
} 

„strzałka "naciśnięcia są wysyłane, gdy użytkownik dotknie krawędzi touchpada, ale nie zostaną rozpoznane w symulatorze. Opcja "Wybierz" jest wysyłana po dotknięciu środkowej części touchpada.

Mam nadzieję, że to pomoże!

+0

To jest, co mam zamiar zakończyć na razie, ale czy powiązane funkcje pras są zawarte w SKScene klasy super, to nie jest to wskazanie, że skojarzone funkcje są używane gdzieś wewnątrz wewnątrz TVOS? –

1

Użyj przycisku pressesBegan, aby odwzorować fizyczny przycisk (Menu, PlayPause) i pressesBegan lub pressesEnded dla gładzika pilota Apple TV Remote (lewy, prawy itp.). Jeśli naciśniesz przycisk "gładzika" i przeniesiesz go w inne miejsce i zwolnisz, metoda pressesEnded nie zostanie wywołana, nie możesz tego zrobić za pomocą fizycznego przycisku.

Prasy Rozpoczęła:

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

Prasy Zakończona:

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