読者です 読者をやめる 読者になる 読者になる

WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

CCMenuを使った3つの記事をレベルアップさせてみる

Cocos2d-x

エンジニアブログ4回目の櫻井です。

今回は今まで書いてきた記事に対して、今見返すともっと良い方法があるじゃないですか!
と思うところがありましたので、見直していこうと思います。

①初回:スクロールビューと複数のボタンを併用する際の注意点
②2回目:CCMenuと不思議なAnchorPointとScale
③3回目:画像はそのままでボタンを押しやすくしてみよう  


①初回:スクロールビューと複数のボタンを併用する際の注意点 について

当時は下図1のような、ScrollView からはみ出た部分のボタンと、別のボタンが重なった場合に対して、
addChild する順番を変えたり、透明な別のボタンを置いたりする方法を取っていました。

BlogFile_sakurai4_01

以前は zorder を変えたり検証していましたが、実はタッチイベント取得の優先度を下記の様に変えれば解決でした。

pMenu->setTouchPriority(-129);

ただし、CCMenu のデフォルト設定は -128 であり、数値が小さい方を優先する仕様ですので、注意が必要です。

これで以前の様にあれこれしなくても、ボタンが重なった場合に意図通りのイベントが取れます。
すっごく簡単じゃないですか!あの頃に知っていればー


②2回目:CCMenuと不思議なAnchorPointとScale について

当時は CCMenu に対して、AnchorPoint が効かないと話しましたが、「 ignoreAnchorPointForPosition(false) 」をすることで、AnchorPoint の固定が解除される為、設定できるようになります。

実際に倍率を変更してやると、前回は位置がずれていましたが、今回は位置がずれることなく設定できているのが分かります。

BlogFile_sakurai4_03

CCMenu は「 ignoreAnchorPointForPosition(true) 」がデフォルトで設定されている為でした。


③3回目:画像はそのままでボタンを押しやすくしてみよう について

前回の内容です。

「方法A:画像領域を setContentSize で広げる」と簡単ですが難点があるので、
「方法B:ダミーの透明なレイヤーを作ってタッチさせましょう」とゆう内容でしたが、同僚のアドバイスで解決!

以下のやり方です。

BlogFile_sakurai4_02

具体的なコードだと、下記の通りです。

// 画像ファイル  
CCSprite* buttonSprite = CCSprite::create("blog_image.png");  
pCloseItem = CCMenuItemSprite::create(buttonSprite, buttonSprite, this, menu_selector(HelloWorld::menuCloseCallback) );  
pCloseItem->setAnchorPoint(CCPointZero);  
  
// 画像の領域を拡張  
pCloseItem->setContentSize(CCSizeMake(pCloseItem->getContentSize().width * 2.0f, pCloseItem->getContentSize().height * 2.0f));  
buttonSprite->setAnchorPoint(CCPointZero);  
  
// 画像の位置をズラす  
buttonSprite->setPosition(ccp(pCloseItem->getContentSize().width * 0.25f, pCloseItem->getContentSize().height * 0.25f));  
pMenu = CCMenu::create(pCloseItem, NULL);  
pMenu->setAnchorPoint(CCPointZero);  
  
// 最後にボタンの位置をズラす  
pMenu->setPosition(ccp(center.x - pCloseItem->getContentSize().width * 0.25f, center.y - pCloseItem->getContentSize().height * 0.25f));

以上。

今までの記事が覆ってしまいましたが、cocos2d-x の初心者だった頃に比べできることが増えてきたとゆうことで(汗

引き続き精進していきます。