ジェスチャー認識機能を1つのシーンからしかアクセスできないようにするにはどうすればいいですか?UITapGestureRecognizerが間違ったシーンから呼び出されています
私は2つのシーンを持つシンプルなcocos2dアプリを持っています。素晴らしい作品
CCScene *gameScene = [GameLayer scene];
GameLayer *gameLayer = (GameLayer *) [gameScene.children objectAtIndex:0];
// Capture a tap
UITapGestureRecognizer *tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:gameLayer action:@selector(handleTapFrom:)] autorelease];
[tapRecognizer setDelegate:viewController];
[viewController.view addGestureRecognizer:tapRecognizer];
[[CCDirector sharedDirector] runWithScene:gameScene];
は、私はタッチイベントを取得し、すべてがダンディです:私はAppDelegateにそうようUITapGestureRecognizerを作成します。しかし、私はとても好きですこれは、私の一時停止画面用に別のシーンに切り替えたい:
PauseMenuScene *pauseMenu = [PauseMenuScene node];
[[CCDirector sharedDirector] replaceScene:pauseMenu];
そのシーンは、私はそれ上の任意の場所に触れると、それがクラッシュした、しかし起動します。これは、タッチがgameSceneに行くことにあると思われます。これは、静止しています。
どうすればよいですか?
andrewxが私の疑惑を確認した後、私はこれを解決できました。個々のシーンにUIGestureRecognizersを追加する方法はまだ分かりませんでしたが、代わりにジェスチャーを代理人に直接送信してから、自分のシーンにそれらを表示させるようにしました。ここでは、スニペットがあります:
AppDelegateでジェスチャー認識を作成します(自己に指示する変更):
UITapGestureRecognizer *tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)] autorelease];
[tapRecognizer setDelegate:viewController];
[viewController.view addGestureRecognizer:tapRecognizer];
次に、私は(私はつもりだった私は実際に私のメインクラスのCCSceneクラスを持っていたことを確認しましたベースのHelloWordクラスをオフにして、CCLayerクラスのみを持っていました)。
@implementation GameScene
@synthesize layer = _layer;
-(id) init
{
if (self = [super init])
{
self.layer = [GameLayer node];
[self addChild:_layer];
}
return self;
}
-(void) dealloc
{
[_layer release];
_layer = nil;
[super dealloc];
}
@end
そして最後に、私はタップ委任:
-(void) handleTapFrom: (UITapGestureRecognizer *) recognizer
{
CCScene *currentScene = [[CCDirector sharedDirector] runningScene];
if ([currentScene isKindOfClass:[GameScene class]])
{
GameLayer *gLayer = ((GameScene *) currentScene).layer;
[gLayer handleTapFrom:recognizer];
}
}