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
Posted by maysent
:

Sprite 텍스처 교체

Cocos2Dx 2013. 6. 6. 20:41 |

void GameScene::swapSpriteTexture(CCSprite *a, CCTexture2D **b)
{
    CCTexture2D *tmp = a->getTexture();
    a->setTexture(*b);
    *b = tmp;
}

 

* 사용법

m_TextureSlot=(CCTexture2D *)CCTextureCache::sharedTextureCache()->addImage("smile.png");
this->swapSpriteTexture(aSprite, &m_TextureSlot);

 

Posted by maysent
:

해당 오류는 cocos2d-x 2.1rc0-x-2.1.3 버전을 기준으로 mac에서 프로젝트를 생성했을 때 발생하는 이슈임.

 

cocos2d-x 프로젝트 안에 있는 create-android-project.sh 로 프로젝트를 생성할 경우, 

sample 코드 구성에 따라서 여러 오류가 발생( 악 엉망! )

 

1. 첫번째 오류

cocos2dXXX.java 파일이, proj.android/src/org/cocos2dx/lib/ 에 복사되지 않는 경우

 

샘플프로젝트 수정

구조가 Samples/Cpp/HellpCpp 안의 파일을 가져다 쓰는 구조로 되어 있는데

이 프로젝트의 src/org/cocos2dx/lib에 해당 파일이 없기 때문에 프로젝트 템플릿에도 복사가 안되는 오류가 있음.

 

cocos2dx/platform/android/java/src/ 안에 있는 org 폴더 전체를 HelloCpp 의 proj.android/src/에 복사한 후

생성 템플릿을 실행하면 된다.


생성 템플릿 수정

template/android/copy_file.sh 스크립트 안의 copy_src_and_jni() 함수를 수정해야 한다.

 

함수 안의 맨 밑에 cp -rf $COCOSJAVALIB_ROOT/src $APP_DIR/proj.android 코드를 

추가한 후에 생성 템플릿을 실행하면 된다.

 

2. 두번째 오류

AndroidMenitest.xml 파일 안에 아이콘 설정이 잘못 된 경우

res/drawable-XXX 안에는 ci_launcher.png 가 있는데, 설정파일에는 drawable/icon 으로 설정 됨.

 

설정 파일 수정

    eclipse 에서 직접 AndroidMenifest.xml 의 drawable/icon 을 drawable/ci_launcher로 변경

 

생성 템플릿 수정

     template/android/copy_file.sh 스크립트 안의 copy_icon() 함수를 수정

 

    if [ ! -d ... ] 의 이 if 문을 #로 주석 처리 한다. ( 마지막의 fi  도 )

   if 문 바로 아래에 rm -f $APP_DIR/proj.android/res/drawable-*/ic*.png 를 추가한다.

Posted by maysent
:

libcocos2d - plaform - win32 - CCCommon.cpp

 

CCLog 메소드에서 CP_UTF8을 아래와 같이 CP_ACP로 변경후 리 빌드

 

    MultiByteToWideChar(CP_ACP, 0, szBuf, -1, wszBuf, sizeof(wszBuf));

Posted by maysent
: