2011-01-07 7 views
3

Ich habe eine CCLayer-Unterklasse, die ich verwende, um einige Sprites anzuzeigen und einige Animationen anzuzeigen. Es hat auch ein CCMenu mit einigen Gegenständen. Wenn der Benutzer einen Teil des Menüpunktes auswählt, möchte ich eine Animation ausführen und dann eine andere Szene zeigen. Aber ich möchte, dass Benutzer während der Animation nichts auf dem Bildschirm berühren können.heiß Touch-Behandlung in CCLayer in cocos2d zu deaktivieren

Natürlich kann ich nur Berührungen in meinen Callbacks deaktivieren, aber vielleicht gibt es einen einfacheren Weg - nur um alle Touch-Handling für eine Weile zu deaktivieren?

+0

Sie können an dieser Antwort aussehen soll: http://stackoverflow.com/questions/1101965/how-can-i-disable-the-touch-detection – lorenzo

Antwort

0

Sie möchten die Singleton-Klasse CCTouchDispatcher betrachten. Wenn Sie einen zielgerichteten Berührhandler hinzufügen, der Berührungen verschluckt (und nichts tut), werden Sie keine Berührungen erhalten. Soweit ich das beurteilen kann, gibt es keine Möglichkeit, Berührungen vollständig zu deaktivieren.

Alternativ können Sie einen neuen CCLayer machen, der über allem anderen steht (ich denke z-Auftrag wirklich hoch wird dies tun), und machen Sie es klar, und haben Sie nichts mit Berührungen zu tun.

hoffe das hilft.

3

Deaktivieren Sie den Touch-Dispatcher, bevor die Animation ausgeführt wird, und aktivieren Sie den Touch-Dispatcher, nachdem die Animation gestoppt wurde. Hier ist der Code-Schnipsel:

[[CCDirector sharedDirector] touchDispatcher].dispatchEvents = NO; 
CCAnimation* animation = [CCAnimation animationWithFrame:@"numberexplode" frameCount:5 delay:0.2]; 
CCAnimate* animate = [CCAnimate actionWithAnimation:animation]; 
CCCallBlock* completion = [CCCallBlock actionWithBlock:^{ 
    [[CCDirector sharedDirector] touchDispatcher].dispatchEvents = YES; 
}]; 
CCSequence* sequence = [CCSequence actions:animate, completion, nil]; 
[self runAction:sequence]; 
+0

I Ich bekomme keine 'touchDispatcher' Methode. Was kann das Problem sein? Ich arbeite mit iOS6. – NeverHopeless

+0

Sie können [[CCDirector sharedDirector] touchDispatcher] durch [CCTouchDispatcher sharedDispatcher] ersetzen –