2013年1月13日日曜日

【cocos2d-x】CCARRAY_FOREACHの使い方(一例)

addChildされてるCCNode等を継承したHogeクラスだけを操作したい時のコードです。

CCArray *children = this->getChildren();
CCObject *obj;
    
CCARRAY_FOREACH(children, obj){
    if (typeid(*obj) == typeid(Hoge)) {
        // Hogeクラスを操作
    }
}

2013年1月9日水曜日

【cocos2d-x】androidでのハードキー対応

androidでのハードキー対応の方法です。
Sceneでキーパッドを有効にしてメソッドをオーバーライドするだけです(余計なとこは省いてます)。

HogeScene.h
class HogeScene : public cocos2d::CCLayer {
public:
    void keyBackClicked();
    void keyMenuClicked();
};
HogeScene.m
bool HogeScene::init() {
    if (!CCLayer::init()) {
        return false;
    }
    // キーパッドを有効に
    setKeypadEnabled(true);

    return true;
}
 
void HogeScene::keyBackClicked() {
    // ハードキー
}
 
void HogeScene::keyMenuClicked() {
    // メニューキー
}

【C++】クラス名を取得する

C++でクラス名を取得する方法です。
#include <typeinfo>
#include <cxxabi.h>

void HogeScene::hoge()
{
int status;
const char* className = abi::__cxa_demangle(typeid(*this).name(), 0, 0, &status);
}
なんかよくわかりませんが__cxa_demangleでデマングルってのをしてるみたいです。