2010-11-23 17 views
0

Ich habe eine Szene, wo es einen Knopf gibt. Sobald ich auf den Knopf klicke, schiebt sich ein rechteckiger Sprite von der linken Seite: http://img255.imageshack.us/img255/9867/slidei.pngCocos2d: Eine Ebene übereinander - Ist es möglich, Berührungen für eine bestimmte Ebene/Region vorübergehend zu deaktivieren?

Unter dieser Form gibt es mehrere berührungsempfindliche Tasten. Ich möchte nicht, dass diese angerufen werden, wenn ich die rechteckige Form anfasse. Solange also die Form auf dem Bildschirm bleibt, sollten diese Berührungen nicht reagieren. Stattdessen gibt es mehrere andere Schaltflächen oben auf dieser braunen Form, die auf Berührungen reagieren. Wie kann ich das schaffen?

Ist es möglich, Berührungen für eine bestimmte Ebene in einer Szene vorübergehend zu deaktivieren? Hat die rechteckige Form ein eigenes CCLayer-Objekt?

Ich weiß, ich könnte eine neue Szene für diese Form schaffen, die einen transparenten Hintergrund hat, aber ich möchte noch auf den Knopf berührt reagieren:

Wenn ich auf diese Schaltfläche klicken, wird die Form gleitet in Als ich. klicken Sie erneut darauf, es rutscht vom Bildschirm.

Antwort

0

Wie bei jeder Benutzerschnittstelle müssen Sie den Objekten mitteilen, ob sie aktiviert sind oder nicht. Am besten ist es, eine Nachricht an die Schaltfläche zu senden, in der Sie aufgefordert werden, sich selbst ein- oder auszuschalten.

Idealerweise verwenden Sie einen globalen Touch-Eingabehandler, anstatt jeder einzelnen Schaltfläche oder Folie zu erlauben, Eingaben selbst zu reagieren. Dies bedeutet eine Menge Ärger und zusätzliche Arbeit. Platzieren Sie stattdessen alle Objekte, die auf Eingabe reagieren sollen, auf derselben Ebene und registrieren Sie diese Ebene mit dem Berührungseingabe-Handler, der dann alle Berührungsereignisse an diese bestimmte Ebene und keine andere weiterleitet.

+0

Ich benutze tatsächlich "rects" und prüfen, ob ein bestimmter Punkt in diesem rect ist. Wie kann ich CGRect oder Objekte im Allgemeinen in cocos2d deaktivieren? Über Ihre zweite Erwähnung: Soll ich also eine zusätzliche Ebene für meine Folienform erstellen, wo nur die Schaltflächen vorhanden sind, die gedrückt werden können, sobald die Folie auf dem Bildschirm angezeigt wird? Wenn ich eine Ebene übereinander habe, fängt sie dann meine Berührungseingabe auf, so dass die darunter liegende Ebene nicht die Berührungsinfo erhält? – KayO

2

Hängt davon ab, ob Sie tatsächliche Schaltflächenobjekte oder CGRect-Regionen verwenden, auf die Ihre touchesBegan-Methode reagiert. Ich stimme GamingHorror zu, dass der sauberste Ansatz darin besteht, die Schaltflächenobjekte nach Bedarf direkt zu aktivieren/deaktivieren.

Dies ist jedoch ein praktikabler Kludim, solange der gleitende Berührungsbereich eine UIView-Unterklasse ist.

Bevor er gleitet in Sie alle Benutzer berührt mit deaktivieren:

[[[UIApplication shared] keyWindow] setUserInteractionEnabled: NO];

Nachdem Ihre Ansicht eingefügt wurde, müssen Sie möglicherweise UserInteractionEnabled: YES für diese bestimmte Ansicht festlegen. Wenn es herausgleitet, können Sie es mit

zurück setzen [[[UIApplication sharedApplication] keyWindow] setUserInteractionEnabled: YES];