0

ユーザーがコントロールボタンを押したかどうかを確認するために、GameplayLayer から HUDLayer にタッチ位置を渡そうとしています。

HudLayer.mm

-(void) handleTouchAtLocation:(CGPoint) location {
NSLog(@"Touch passed to HUD");
}

ゲームプレイ.mm

enum {
   kHudLayer = 2;
};

+(CCScene *) scene {
    CCScene *scene = [CCScene node];
    HudLayer *hud = [HudLayer node];
    [scene addChild:hud z:kHudLayer];
    GameplayLayer *layer = [GameplayLayer node];
    [scene addChild:layer];
    return scene;
}

-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   for( UITouch *touch in touches ) {
      CGPoint location = [touch locationInView: [touch view]];
      location = [[CCDirector sharedDirector] convertToGL: location];
      [self handTouchAtPoint:(location)];
   }
}

-(void) handleTouchAtPoint:(CGPoint)location {
   NSLog(@"Touch At Point");
   HudLayer *h1 = (HudLayer *)[self.parent getChildWithTag:kHudLayer];
   [h1 handleTouchAtLocation:location];
}

HudLayer.h は GameplayLayer.h にインポートされます。「Touch At Point」ログを取得していますが、何らかの理由で HUD レイヤーに到達していません..

4

1 に答える 1

1

唯一の説明はself.parent、タグを持つ子がないことkHudLayerです。handleTouchAtPoint にブレークポイントを設定すると、行が実行h1された後に nil になることに気付くでしょう。getChildWithTag

于 2012-10-08T15:06:07.320 に答える