2014-06-16 1 views
0

로 만든 라벨에서 하나 개의 문자를 추출합니다. 내가 새로운 게임 같은 문자열에서 천천히 하나의 문자를 보여주기 위해 노력하고 CClabelBMFont

는 문자열에서 하나 개의 문자를 추출 CCLabelBMFont을 사용하여 다음과 같이 처음에 나는 코드를 작성, 그것을합니다.

string str = "I like an apple"; 

CCLabelBMFont *label = CCLabelBMFont::create(str.c_str(), "font.fnt"); 

CCSprite *spr = (CCSprite*)label1->getChildByTag(0); 
spr->setPosition(ccp(100, 100)); 

this->addChild(spr); 
I (이)

GameScene에 CCLabelBMFont에서 추출 된 SPR을 보여주고 싶은

그러나

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

왜 그런 오류가 나타 납니까 다음과 같이 I 오류는 무엇입니까? 어떻게해야합니까? 사용하는 방법 및 당신이 얻을 오류에

+0

라벨에서 문자 하나만 보여 주면됩니다. 왜 그냥'setString()'을 사용하지 않고 더 많은 문자를 추가 할 때 다시 호출할까요? – GameDeveloper

+0

부모에게 동일한 자녀를 추가 할 수 없으면 새 자녀를 만들어야합니다. 같은 사용자가 –

+0

가능한 중복 : http://stackoverflow.com/questions/24227438/to-make-a-sprite-of-one-char-from-string – GameDeveloper

답변

0

봐. 스프라이트를 얻으려면 getChildByTag(...)을 사용하십시오. 따라서 CCLabelBMFont 노드의 child 노드는 parent을 의미합니다. 이 스프라이트에는 이미 부모가 있으므로이 스프라이트를 자식으로 다시 추가 할 수 없다는 오류가 표시됩니다.

나는 straigthforward 당신이 원하는 것을 달성 할 수 있는지 방법을 생각할 수 있지만, 여기에 몇 가지 제안을 당신이 시도 할 수 있습니다 :

  • 별도의 레이블로 각 문자를 추가 - 솔직히입니다 불필요하게 코드를 곱하고 너무 많은 메모리를 사용하기 때문에 정말 바보입니다.
  • 레이블의 자식을 보이지 않게 만들고, 하나씩 볼 수있게합니다. 라벨을 만들 때 자녀를 반복하고 setVisible(false)을 호출하십시오. 그 다음에 자녀에게 setVisible(true)으로 전화 할 일정을 정하십시오.
  • 은 아마도 LabelBMFont의 서브 클래스를 생성 및/또는 가장 유연한 방법이 될 수있는 사용자 지정 작업을 생성하지만 propably하지 쉬운.

알려지지 않은 것이 있으면 알려주세요!

+0

별도의 레이블은 아주 좋은 해결책이 아니다. 왜 기본적인 std :: string 연산을하고, 필요에 따라'label-> setString()'을 할까? 나는 루프를 상상해 각각의 추가 문자를 붙인 다음 레이블의 텍스트를 다시 설정합니다. – GameDeveloper

+0

그건 훌륭한 제안입니다! 나는 모든 것을 지나치게 숙고 했음에 틀림 없다. 명성 @GameDeveloper! – Losiowaty

+0

답변 해 주셔서 감사합니다. 동일한 자녀를 학부모에게 추가 할 수 없음을 이해합니다. 내가 setString 등을 사용하는 tryed하지만 그런데 는,()는 다음 사이트와 같은 문자열에서 천천히 한 문자를 표시하려면 [http://survive-engineer.hatenablog.com/entry/2014/02/13/013103] (http://survive-engineer.hatenablog.com/entry/2014/02/13/013103), 표현할 수 없습니다. 그러나 CCAction과 CCLabelBMFont를 사용했는데 어떻게 든 할 수있었습니다. – user3321541

관련 문제