2012. 11. 27. 12:10

void SpriteEaseElasticInOut::onEnter()

{

    EaseSpriteDemo::onEnter();

    

    CCSize s = CCDirector::sharedDirector()->getWinSize();

    

    CCActionInterval* move = CCMoveBy::create(3, CCPointMake(s.width-130, 0));


    CCActionInterval* move_ease_inout1 = CCEaseElasticInOut::create((CCActionInterval*)(move->copy()->autorelease()), 0.3f);

    CCActionInterval* move_ease_inout_back1 = move_ease_inout1->reverse();

    

    CCActionInterval* move_ease_inout2 = CCEaseElasticInOut::create((CCActionInterval*)(move->copy()->autorelease()), 0.45f);

    CCActionInterval* move_ease_inout_back2 = move_ease_inout2->reverse();

    

    CCActionInterval* move_ease_inout3 = CCEaseElasticInOut::create((CCActionInterval*)(move->copy()->autorelease()), 0.6f);

    CCActionInterval* move_ease_inout_back3 = move_ease_inout3->reverse();

    

    CCDelayTime *delay = CCDelayTime::create(0.25f);

        

    CCFiniteTimeAction* seq1 = CCSequence::create(move_ease_inout1, delay, move_ease_inout_back1, CCCA(delay), NULL);

    CCFiniteTimeAction* seq2 = CCSequence::create(move_ease_inout2, CCCA(delay), move_ease_inout_back2, CCCA(delay), NULL);

    CCFiniteTimeAction* seq3 = CCSequence::create(move_ease_inout3, CCCA(delay), move_ease_inout_back3, CCCA(delay), NULL);

    

    m_tamara->runAction( CCRepeatForever::create((CCActionInterval*)seq1));

    m_kathia->runAction( CCRepeatForever::create((CCActionInterval*)seq2));

    m_grossini->runAction( CCRepeatForever::create((CCActionInterval*)seq3)); 

}

Posted by Нуеоп

1페이지 이상은 안된다.

반드시 폰트 이미지는 1페이지로 구성되어야 한다.


void CCBMFontConfiguration::parseCommonArguments(std::string line)

에서 

    // pages. sanity check

    index = line.find("pages=") + strlen("pages=");

    index2 = line.find(' ', index);

    value = line.substr(index, index2-index);

    CCAssert(atoi(value.c_str()) == 1, "CCBitfontAtlas: only supports 1 page");


부분이 있기 때문이다.

'Cocos2d' 카테고리의 다른 글

CCAction 관리  (0) 2012.11.27
cocos2d-x Sprite의 이미지를 바꾸기  (0) 2012.08.29
cocos2d-x "color type 6"  (0) 2012.08.29
cocos2d-x CCTextureCache::sharedTextureCache()->textureForKey()  (0) 2012.08.28
cocos2d-x addChild()와 onEnter()  (0) 2012.08.24
Posted by Нуеоп

http://stackoverflow.com/questions/10456040/how-to-swap-the-sprite-in-the-ccsprite-object-in-cocos2d-x


if(containsTouchLocation(pTouch)){

CCSprite* pScroll2 = (CCSprite*)(this->getChildByTag(105));

if( pScroll2 ){

CCIcon* icon = ((CCIcon*)pScroll2->getChildByTag(100));

if( icon ){

icon->setTexture(this->getTexture());

}

}

}

Posted by Нуеоп
2012. 8. 29. 16:17

color type 6

color type 6

color type 6

color type 6

color type 6

...

이런식으로 뜨는 이유는, addImage()

CCImageCommon_cpp.h의 bool CCImage::_initWithPngData(void * pData, int nDatalen)에서 출력하기 때문이다.


그 밑에 CCLog("unsopprted color type %u", color_type); 여기서 unsopprted 는 unsupported 의 오타인것 같다.




Posted by Нуеоп

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("xxx.plist");

CCTexture2D * pTexture = CCTextureCache::sharedTextureCache()->textureForKey("yyy.png");


왜 pTexture는 NULL이 될까 ...ㅠㅠ



분명 xxx.plist에는 yyy.png가 key로 잘 들어 있는데...

구글링해보니 절대경로, 상대경로 문제였다는데, 1년전에 고쳐진듯 한데......ㅠㅠ







CCSpriteFrame 과 spriteFrameByName()을 이용할 것!



Posted by Нуеоп

CCNode의 addChild()를 살펴보면


void CCNode::addChild(CCNode *child, int zOrder, int tag)

{    

    CCAssert( child != NULL, "Argument must be non-nil");

    CCAssert( child->m_pParent == NULL, "child already added. It can't be added again");


    if( ! m_pChildren )

    {

        this->childrenAlloc();

    }


    this->insertChild(child, zOrder);


    child->m_nTag = tag;


    child->setParent(this);

    child->setOrderOfArrival(s_globalOrderOfArrival++);


    if( m_bIsRunning )

    {

        child->onEnter();

        child->onEnterTransitionDidFinish();

    }

}


child노드의 onEnter()를 호출한다.



Posted by Нуеоп

Unhandled exception at 0x00000000 in HelloWorld.exe: 0xC0000005: Access violation reading location 0x00000000.


이런 오류가 날 경우 다음과 같이 해결


http://www.cocos2d-x.org/boards/6/topics/11806


http://www.cocos2d-x.org/boards/6/topics/12188



요약 


1.

libCocos2d의 ccConfig.h에서 CC_TEXTURE_ATLAS_USE_VAO가 0이 되도록 조정

VAO (Vertex Array Objects)는 많은 메모리를 소모한다.


2.

opengl 라이브러리 쪽 문제일 수 있다. 최신버전으로 업데이트 해라.


3.

libCocosDenshion 링크 문제일 수 있다. libCocosDenshion의 프로젝트 옵션에서 /INCREMENTAL:NO 설정해라.


진짜 원인.

그래픽카드 드라이버를 새로 설치해야함

Posted by Нуеоп

2.x 부터는 


CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);


대신


CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);


사용하면 된다.

'Cocos2d' 카테고리의 다른 글

cocos2d-x addChild()와 onEnter()  (0) 2012.08.24
cocos2d-x HelloWorld 실행시 오류  (1) 2012.08.24
cocos2d-x schedule 관리  (0) 2012.08.16
cocos2d-x Schedule에 대해  (0) 2012.08.14
cocos2d-x에서 한글 출력하는 방법  (0) 2012.08.14
Posted by Нуеоп
2012. 8. 16. 10:40

void MyScene::scheduleCountOne(float dt)

{

this->unschedule(schedule_selector( MyScene ::scheduleCountThree));

this->schedule(schedule_selector( MyScene ::scheduleCountTwo), 0.0f, 0, 1.0f);

CCLog("One");

}

void  MyScene ::scheduleCountTwo(float dt)

{

this->unschedule(schedule_selector( MyScene ::scheduleCountOne));

this->schedule(schedule_selector( MyScene ::scheduleCountThree), 0.0f, 0, 1.0f);

CCLog("Two");

}

void  MyScene ::scheduleCountThree(float dt)

{

this->unschedule(schedule_selector( MyScene ::scheduleCountTwo));

this->schedule(schedule_selector( MyScene ::scheduleCountOne), 0.0f, 0, 1.0f);

CCLog("Three");

}


1초마다 scheduleCountOne->scheduleCountTwo->scheduleCountThree->scheduleCountOne

돌아가면서 호출된다.

Posted by Нуеоп

주기적으로 실행되게 하기 위해 각 객체의 schedule()함수를 이용한다.


schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay);


첫번째 인자는, 스케쥴링시 호출할 함수

두번째 인자는, 호출할 함수의 시간 간격

세번째 인자는, 몇번 호출할 것인지 (무한대로 설정할 수도 있다)

네번째 인자는, 최초 schedule()에 등록된후 몇 초후 부터 스케쥴링 할 것인지를 넘겨주어야 한다.


unschedule(SEL_SCHEDULE selector) 나 unscheduleAllSelectors() 로 스케쥴 등록을 제거할 수 있다.






Posted by Нуеоп

1.

http://www.angelcode.com/products/bmfont/ 에서 폰트 변환 프로그램을 통해, 원하는 폰트, 원하는 글자를 변환 (*.tga, *.fnt) 파일 생성


예) mybmpfont.tga, mybmpfont.fnt



2.

strings.xml 파일 작성


...

<key>hello</key>

<string>안녕하세요</string>


...



3.

CCDictionary *strings = CCDictionary::create("strings.xml");

const char *hello= ((CCString*)strings->objectForKey(" hello "))->m_sString.c_str();


CCLabelBMFont *label1 = CCLabelBMFont::create( hello , "mybmpfont.fnt", 200, kCCTextAlignmentLeft);



4.

만약 오류가 난다면, mybmpfont.tga를 mybmpfont.png로 변환하고, mybmpfont.fnt을 열어서

file="mybmpfont.tga" 를 file="mybmpfont.png" 로 수정






1.

http://www.angelcode.com/products/bmfont/ 에서 폰트 변환 프로그램을 통해, 원하는 폰트, 원하는 글자를 변환 (*.tga, *.fnt) 파일 생성


우선 Font Settings 에서 원하는 한글 출력 가능한 폰트를 선택한다.

Charset는 Unicode를 선택한다.


Export Options 에서 File format를 XML이 아닌 Text로 선택하고, Textures를 tga가 아닌 png를 선택한다. 생성하기 원하는 한글을 선택한 후, Save bitmap font as ... 로 저장한다.


그러면 *.png 와 *.fnt 파일이 생성 될 것이다. 참고로 *.fnt는 ANSI여도 된다.








2.

strings.xml 파일을 Unicode나 UTF-8로 생성한다.


...

<key>hello</key>

<string>안녕하세요</string>


...

다음과 같은 형태로 작성하되, <string>에 해당하는 한글은 반드시 *.fnt, *.png에 있어야 한다.





3.

CCDictionary *strings = CCDictionary::createWithContentsOfFile("strings.xml");

const char *strHello= ((CCString*)strings->objectForKey("hello"))->m_sString.c_str();


CCLabelBMFont *label1 = CCLabelBMFont::create( strHello, "mybmpfont.fnt", 200, kCCTextAlignmentLeft);


요렇게 사용하면 된다.



4.

mybmpfont3.fnt에서

info face="맑은 고딕" size=32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0

common lineHeight=32 base=26 scaleW=256 scaleH=256 pages=3 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0

page id=0 file="mybmpfont3_0.png"

page id=1 file="mybmpfont3_1.png"

page id=2 file="mybmpfont3_2.png"

...


중에서 page가 1이 아닌 값이면 안된다.

CCBitfontAtlas는 1페이지만 지원한다.



Posted by Нуеоп

m_emitter->runAction(

cocos2d::CCSequence::actions(

cocos2d::CCMoveTo::actionWithDuration(0.2f, dst->getPosition()),

cocos2d::CCDelayTime::actionWithDuration(3.0f),

cocos2d::CCBlink::create(2.0f, 1),

NULL

)

);


이런식으로 action에서 CCDelayTime과 CCBlink을 이용해서 객체를 제거해주었다.


-----------------------------------------------------------------------------------------


m_emitter->runAction(

cocos2d::CCSequence::actions(

cocos2d::CCMoveTo::actionWithDuration(0.2f, dst->getPosition()),

cocos2d::CCDelayTime::actionWithDuration(3.0f),

cocos2d::CCCallFuncN::create(

this, (cocos2d::SEL_CallFuncN)(&CMissile::destroy)

),

NULL

)

);


다음과 같이 제거한다.

Posted by Нуеоп
이전버튼 1 이전버튼