1

複数のタッチ処理を理解しようとしていますCCNode

私は持っています

 Main CCLayer
            ------> z:2 Hud CCNode

オブジェクトを選択するとき、hudレイヤーでそれmain layerを制御したい。私はこのQ&Aに従って、複数のレイヤーでタッチを処理する非常に役立つ Cocos2dを使用しました

Main Layerタッチイベントでは、以下はHudNodeの作業です。

-(void) registerWithTouchDispatcher
{
   [[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:0 swallowsTouches:YES]; 
}
-(BOOL) ccTouchBegan:(UITouch*)touch withEvent:(UIEvent*)event
{
    //detects touched Object and sends it to hud 

    if (object != nil)
    {
        //sends it to hud
        return true;
    }

    return false;
}
-(void) ccTouchMoved:(UITouch*)touch withEvent:(UIEvent*)event

-(void) ccTouchEnded:(UITouch*)touch withEvent:(UIEvent*)event

-(void) ccTouchCancelled:(UITouch*)touch withEvent:(UIEvent*)event

Hud CCNodeでは、ccTouchBegan / moved/endedメソッドはいずれも起動されません

-(void) registerWithTouchDispatcher
{
  [[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:0 swallowsTouches:YES];

}
-(BOOL) ccTouchBegan:(UITouch*)touch withEvent:(UIEvent*)event
{
    if (object!=nil) {
        NSLog(@"Touch began");
        return YES;
    }
    else
        return NO;
}

編集:HUDノードのオブジェクトの速度を設定するボタンがあります。object!=nilブレークポイントを設定すると-(BOOL) ccTouchBegan:(UITouch*)touch withEvent:(UIEvent*)event呼び出されないことがわかるため、これとは関係ありません。

-(void)speed1Tapped:(id)sender
{
    if (object!=nil) {
        NSLog(@"Moving Object is %@:",object!=nil);
     }
}
On Log I get:
object is <ObjectATC: 0x13763850>

CCNodeでccTouchBegan/moved / endメソッドが起動されないのはなぜですか?

複数のCCNode、CCLayersでのタッチを処理するにはどうすればよいですか?

4

2 に答える 2

0

touchメソッドには、という条件がありますがif (object != nil)、オブジェクトは、表示したコードのどこにも定義されていません。他の場所で定義されていますか?そうでなければ、これが発火しない理由です。

于 2013-01-31T23:30:58.920 に答える
0

登録していないのでタッチ方式は受けられないと思いますtouchDipatcher

CCNodesinitメソッドまたはメソッドのいずれかでonEnterそれを登録してみてください。

//register touches
- (void)onEnter {
    [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
    [super onEnter];
}

- (void)onExit {
    [[[CCDirector sharedDirector] touchDispatcher]removeDelegate:self];
    [super onExit];
}
于 2013-02-06T15:02:37.373 に答える