2013-09-26 8 views
11

Ich experimentierte mit UIGestureRecognizers und die neue SKScene/SKNode's in SpriteKit. Ich hatte ein Problem, und ich war kurz davor, es zu beheben, aber ich bin in einer Sache verwirrt. Im Wesentlichen habe ich einen Pan-Gesten-Erkenner, mit dem der Benutzer ein Sprite auf den Bildschirm ziehen kann.UIPanGestureRecognizer in SKScene

Das einzige Problem, das ich habe, ist, dass es ein Tippen erfordert, um die Schwenkgeste tatsächlich zu initialisieren, und dann nur auf dem ZWEITEN Antippen funktioniert es richtig. Ich denke, dass dies daran liegt, dass meine Schwenkgeste in touchesBegan initialisiert wird. Allerdings weiß ich nicht, wo ich es sonst hinstellen könnte, da die Initialisierung der SKScene-Methode initWithSize den Gestenerkenner daran hinderte, tatsächlich zu arbeiten.

Antwort

11

Das ist, weil Sie die Geste in Berührungen begonnen haben, so dass die Geste nicht existiert, bis der Bildschirm mindestens einmal angetippt wurde. Außerdem würde ich überprüfen, dass Sie tatsächlich initWithSize verwenden: als Initialisierer, weil Sie keine Probleme haben sollten, die Geste dort hinzuzufügen.

Eine weitere Option ist, den Code zu verschieben, um die Geste in -[SKScene didMovetoView:] hinzuzufügen, die sofort aufgerufen wird, nachdem die Szene präsentiert wurde. Mehr Infos in the docs.

- (void)didMoveToView:(SKView *)view 
{ 
    [super didMoveToView:view]; 
    // add gesture here! 
} 
1

Dies ist meine erste Post! Ich hoffe, nicht über meine eigenen Zehen stolpern ...

Hallo Leute, so hatte ich ein Problem mit einem UISwipeGestureRecognizer funktioniert nicht. Ich habe es in meiner initWithSize-Methode initialisiert, also habe ich es basierend auf diesem Post auf meine didMoveToView-Methode verschoben. Jetzt funktioniert es (danke 0x7fffffff). Alles, was ich tat, war die folgenden zwei Zeilen von einer Methode zu schneiden und sie in die andere einzufügen.

_warpGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(warpToNextLevel:)]; 
[self.view addGestureRecognizer:_warpGesture]; 

In meiner „Untersuchung“ Ich kam in userInteractionEnabled und versuchte, es zu JA in meiner initWithSize Methode zu setzen ...

self.view.userInteractionEnabled = YES; 
NSLog(@"User interaction enabled %s", self.view.userInteractionEnabled ? "Yes" : "No"); 

Dies würde NO selbst einzuloggen, obwohl ich es nur gesetzt würde zu JA. Weitere Untersuchung ergab, dass wenn ich nicht versuche, userInteractionEnabled manuell zu setzen, dann ist es NEIN während der InitWithSize (ich kann nicht scheinen, dies zu ändern, wenn ich will) und automatisch auf JA gesetzt, wenn ich in DidMoveToView bin.

Das alles scheint mir relevant, aber ich würde gerne jemanden wissen, der gerade erklärt, was hier vor sich geht. Vielen Dank!

Verwandte Themen