0

Ich arbeite an einem GLKViewController basierten Spiel, das Taps und Swipes als Spielsteuerung interpretiert. Ich möchte den Zweispielermodus unterstützen, indem der erste Spieler auf der linken Seite des Bildschirms tippt oder wischt und der zweite Spieler auf der rechten Seite des Bildschirms tippt oder wischt. In einer perfekten Welt möchte ich, dass die Gestenerkenner funktionieren, selbst wenn die Wischbewegungen nachlässig sind und über die Mittellinie des Bildschirms hinausgehen (wobei der Startpunkt des Wischens verwendet wird, um zu bestimmen, welcher Spieler die Eingabe erhält).iPad: Gestenerkennung auf der linken/rechten Seite des Bildschirms

Was wäre der beste Weg, dies zu implementieren? Kann ich einen Gestenerkenner in der linken Hälfte des Bildschirms und einen anderen auf der rechten Seite des Bildschirms platzieren? Funktionieren zwei getrennte Erkenner richtig zusammen, auch wenn beide Seiten gleichzeitig schnell getippt werden? Oder sollte ich einen Vollbild-Erkenner erstellen und die Swipes und Taps komplett selbst analysieren? Ich habe keine Erfahrung mit Gestenerkennern, deshalb weiß ich nicht, was der bevorzugte Ansatz ist oder wie gut sie funktionieren, wenn Sie mehr als ein Mal gleichzeitig klauen lassen.

Antwort

0

Ich landete zwei UIViews auf meinem GLKView überlagert, einen auf der linken Seite des Bildschirms und einen auf der rechten Seite. Jede Ansicht hat eine UIPanGestureRecognizer und eine UILongPressGestureRecognizer (der Langzeitreporter ist im Grunde ein flexiblerer Tipp, den ich verwenden musste, um einige Gesten zu unterdrücken, die gleichzeitig als Pan und Tap interpretiert werden). Das hat wunderbar funktioniert.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Add tap and pan gesture recognizers to handle game input. 
    { 
     UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleLeftSidePan:)]; 
     panRecognizer.delegate = self; 
     [self.leftSideView addGestureRecognizer:panRecognizer]; 

     UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLeftSideLongPress:)]; 
     longPressRecognizer.delegate = self; 
     longPressRecognizer.minimumPressDuration = 0.0; 
     [self.leftSideView addGestureRecognizer:longPressRecognizer]; 
    } 
    { 
     UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightSidePan:)]; 
     panRecognizer.delegate = self; 
     [self.rightSideView addGestureRecognizer:panRecognizer]; 

     UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightSideLongPress:)]; 
     longPressRecognizer.delegate = self; 
     longPressRecognizer.minimumPressDuration = 0.0; 
     [self.rightSideView addGestureRecognizer:longPressRecognizer]; 
    } 
} 

- (void)handleLeftSidePan:(UIPanGestureRecognizer *)panRecognizer 
{ 
    [self handleGameScreenPan:panRecognizer withVirtualController:&g_iPadVirtualController[0]]; 
} 

- (void)handleRightSidePan:(UIPanGestureRecognizer *)panRecognizer 
{ 
    [self handleGameScreenPan:panRecognizer withVirtualController:&g_iPadVirtualController[1]]; 
} 

- (void)handleLeftSideLongPress:(UILongPressGestureRecognizer *)longPressRecognizer 
{ 
    [self handleGameScreenLongPress:longPressRecognizer withVirtualController:&g_iPadVirtualController[0]]; 
} 

- (void)handleRightSideLongPress:(UILongPressGestureRecognizer *)longPressRecognizer 
{ 
    [self handleGameScreenLongPress:longPressRecognizer withVirtualController:&g_iPadVirtualController[1]]; 
}