(cocos2d-x) 하위 노드 터치 불가 만들기 및 복구하기
Cocos2Dx 2013. 6. 25. 21:25 |private:
map<CCObject*, bool> enableTable;
public:
void setDisableWithRunningScene()
{
CCScene* runningScene = CCDirector::sharedDirector()->getRunningScene();
_setDisableWithRunningScene(runningScene);
}
void restoreDisable()
{
for(auto iter = enableTable.begin(); iter != enableTable.end(); ++iter)
{
CCMenuItem* menuItem = dynamic_cast<CCMenuItem*>(iter->first);
if(menuItem)
{
menuItem->setIsEnabled(iter->second);
}
CCLayer* someLayer = dynamic_cast<CCLayer*>(iter->first);
if(someLayer)
{
someLayer->setIsTouchEnabled(iter->second);
}
}
}
private:
void _setDisableWithRunningScene(CCNode* node)
{
CCMenuItem* menuItem = dynamic_cast<CCMenuItem*>(node);
if(menuItem)
{
enableTable[menuItem] = menuItem->getIsEnabled();
menuItem->setIsEnabled(false);
}
CCLayer* someLayer = dynamic_cast<CCLayer*>(node);
if(someLayer)
{
enableTable[someLayer] = someLayer->getIsTouchEnabled();
someLayer->setIsTouchEnabled(false);
}
if(node->getChildrenCount())
{
CCArray* children = node->getChildren();
for(int i=0; i<children->count(); i++)
{
_setDisableWithRunningScene((CCNode*)children->objectAtIndex(i));
}
}
}
_setDisableWithRunningScene 안에 들어가는 인자를 포함해서 아래 child 탐색하면서 모두 터치 불가능하게 만듭니다.
그리고 restore 하시면 기억한 정보를 바탕으로 다시 터치 유/무 를 복구시킵니다.
restore 시, 사라진 객체에 대한 처리는 없습니다. 예외 처리를 하실 일 있으면 직접 하셔야 합니다~~
그리고 restore 로 복구 하시면 됩니다. 자체 AlertView 만드시는 분들이나 팝업창 만들고 다른것 클릭 안되게 하실 분 쓰시면 유용합니다.
좋은 정보 공유감사합니다.
그런데 alertview같은 팝업을 띄우고, 그 뒤의 화면에 대한 터치를 막으려면 저 방법보다는
alertview 클래스에서 touch를 등록할때 standard touch가 아닌, targeted touch로 등록을 하면 간단하게 됩니다.
targeted touch를 등록할 때 swallow(다른 터치를 꿀꺽 삼킬지 여부) 인자를 넣어주는 부분이 있습니다.^^
그런식으로 하면 CCMenu 를 이용한 터치는 어떻게 피할 수 있나요? 뒤에 깔린 CCMenuItem 터치는 피할 수 없던데요
touch priority를 -128보다 작은 값으로 주세요.
CCMenu의 touch priority가 -128이기 때문에 그것보다 작은 값을 사용하면 먼저 터치를 처리할 수 있습니다.
'Cocos2Dx' 카테고리의 다른 글
pugixml cocos2d-x (0) | 2013.10.09 |
---|---|
CCScrollView 사용법 (0) | 2013.08.10 |
Sprite 텍스처 교체 (0) | 2013.06.06 |
cocos2dx android 프로젝트 생성 시 오류 해결 법. (0) | 2013.06.01 |
CCLog 한글 출력 가능하게 만들기 (0) | 2013.06.01 |