CCControlButtonについて

cocos2dxでボタンを作る場合、CCMenuで作る事が多いと思います。
ですが、例えば「タッチしてから離すまで弾を発射したい!!」という仕様があった場合、CCMenuで作成したボタンにはタップされた時のイベントしか存在しないので、この仕様を実現することは難しいです。
そこで、CCMenuに代わりCCControlButtonを使うことで、これらの問題を解決することができます。

まずは以下のヘッダーとマクロをソースに記述します。

[cpp]
#include "cocos-ext.h"
USING_NS_CC_EXT;
[/cpp]

今回は多くのイベントが存在するボタンを作るためにCCControlButtonを使うので、最低限のコードのみで記述します。

[cpp]
/// スプライトの生成
CCScale9Sprite* pSprite = CCScale9Sprite::create("MyButton.png");

/// コントロールボタンの生成
CCControlButton* pButton = CCControlButton::create(pSprite);

/// ボタンの大きさの設定
/// 画像の元のサイズを入れておきます
pButton->setPreferredSize(CCSizeMake(64,64));

/// 座標の設定
pButton->setPosition(CCPointZero);

/// ボタンをレイヤーとして追加
this->addChild(pButton);
[/cpp]

ひとまずはこれでボタンが表示され、タッチする事ができます。(タッチするとズームインされます)

次はこのボタンにイベントとそのコールバックを追加していきます。
上記を行うために以下のメソッドを行えばOKです。
XXXにはイベントリストから選択したものを記述してください。

イベントリスト(一部だけ)
[cpp]
////////////////////////////////////////////////////////
/// イベントリスト
////////////////////////////////////////////////////////
/// CCControlEventTouchDown タッチされた
/// CCControlEventTouchUpInside 指が内側で離された
/// CCControlEventTouchUpOutside 指が外側で離された
/// CCControlEventTouchCancel キャンセルされた
////////////////////////////////////////////////////////
[/cpp]

[cpp]
pButton->addTargetWithActionForControlEvents(this,cccontrol_selector("クラス名"::"コールバック(メソッド名)"),XXX);
[/cpp]

時間があればもう少し詳しく紹介するかもしれません。

以上です。

CCFadeInについて

以下のようなソースコードでフェードインを実行した際、スプライトがフェードイン前に一瞬見えてしまう問題が起こります。

[cpp]
/// フェードインアクションの生成
/// 3秒かけてフェードインする
CCActionInterval* pFadeInAction = CCFadeIn::create(3.0f);

/// アクションを実行するスプライトの生成
CCSprite* pSprite = CCSprite::create();

/// スプライトを子レイヤーとして追加
this->addChild(pSprite);

/// アクションを実行
pSprite->runAction(pFadeInAction);
[/cpp]

以下のコードを、アクション実行前に追加することにより、問題を修正することができます。

[cpp]
/// スプライトを透明にする
pSprite->setOpacity(0);
[/cpp]

以上です。