プログラマメモ2 - programmer no memo2

イベントを下に通さない - cocos2d 2013/05/02

cocos2dです。iOSのです。
CCLayerでダイアログっぽいのを作成しているのですが、手間に表示させてボタンとか用意しているのですが、どうも、うしろに表示されているメインの画面のボタンも押せてしまえるわけです。


どういうことかというと上記(がんばって画像用意した)のように、なっていて、A面で発生するタッチイベントを遮断したいわけです。
イベントの消費(consume)をおこないたいわけです。

B面はCCLayerを拡張して、ボタンか配置して、ダイアログっぽいのをつくっています。

調べていくと、registerWithTouchDispatcherとか、swallowsTouchesとか、キーワードしてでてくるっぽいのですが、
 いまいちやり方が思いつかない、わからないので、古典的な方法で対処しようかと。

で、どんなやり方かというと、 CCMenuItem、CCMenuを使ってメニューイベントとして消費してしまうというやり方です。

空のCCMenuItemを作成します。それでこの作成したCCMenuItemを大きいサイズ(setContentSize)にしてしまい、大きなボタンにしてしまうわけです。

コード的にはこんな感じ
        CCMenuItem *dummy = [CCMenuItem itemWithBlock:^(id sender) {
            NSLog(@"*** touched!!");
        }];

        [dummy setContentSize:CGSizeMake(size.width, size.height)];
        CCMenu *dummyMenu = [CCMenu menuWithItems:dummy, nil];
        dummyMenu.position = ccp( size.width /2 , size.height/2);
        [self addChild:dummyMenu];

ここのselfはベースにCCLayerです。sizeは画面のサイズです。
この方法で、おくのA面でのイベントを上に通さないことができました(A面でのボタンを押しても反応させないように)。
さきにこのダミーmenuをアッドしてから、必要な部品をたしていく感じで画面を構成できます。
空のCCMenuItemをつくれてよかったよかった。

: