0

こんにちは、cocos2d ゲーム開発者の皆さん、私は単純な問題を抱えています

2 つの CCLayer を持つ CCScene を実装しています。1 つはゲームで、もう 1 つは次のように実装された HUD です。

+ (CCScene *)scene {
    CCScene *scene = [CCScene node];
    LevelLayer *layer = [LevelLayer node];
    LevelHUDLayer *hud = [LevelHUDLayer node];
    layer = [layer init];

    [layer setHUDLayer:hud];
    [hud setParentLevel:layer];

    [scene addChild:hud z:HUD_ZLevel];
    [scene addChild:layer];

    return scene;
}

そして、それはうまく機能します。また、次のように実装する UIPinchGestureRecognizer もあります。

- (void)onEnterTransitionDidFinish {
    pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(makePinch:)];
    [[CCDirector sharedDirector].view addGestureRecognizer:pinch];
}

そして、後で次のようなコードでジェスチャーをキャッチします。

self.scale = pinch.scale;

これは問題なく動作しますが、HUDLayer ではなく、ゲーム レイヤーのみがジェスチャを取得するようにする必要があります。現在、HUDLayer のコントロールに触れて、画面上でキャラクターを動かそうとすると、レベルがスケーリングされます。これは非常に面倒です。

私の質問は、LevelLayer のみを割り当てて Gesture Recognizer を取得するにはどうすればよいですか? CCLayer の UIView にアクセスできれば簡単にできると思いますが、CCDirector.sharedDirector.view しかアクセスできないようです。

お早めにどうぞ!

4

1 に答える 1

0

CCLayer のビューにアクセスできないのは、単純な理由の 1 つです。それは存在しません。すべての cocos2d ロジックは、単一の openGL ビュー内で作成されます。

ジェスチャ認識エンジンの領域を制限するには、デリゲート メソッドを実装できますgestureRecognizerShouldBegin:。そこでは、タッチの位置を確認NOし、それらがゲーム レイヤーではなく HUD の上にある場合に戻ることができます。

もう 1 つの方法は、cocos2d の CCTouchDispatcher を使用して独自のジェスチャ認識機能を実装することです。

于 2012-11-16T07:44:12.413 に答える