Post

Cocos2d NULL 아니라 nullptr

1. cocos2dx null 체크

define 되어있는걸로 봐서는 NULL 0 이라서

이건 쓰면 안될 거 같은데;;; 하고 있다가 찾아보니

C++11부터는 nullptr 쓰면 된다고 적혀 있었음 ㅇㅇ

그래서 nullprt을 사용했다.

2. cocos2dx 한글 폰트 적용

1) visual studio 출력단에서 글자가 깨지는 경우.

이 경우에는 헤더, cpp 파일 인코딩이 다른 경우라 다른이름으로 저장-인코딩해서 저장- 유니코드 utf8로 변경해주면된다.

2) cocos2d System font를 사용하고 싶은 경우

#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#pragma execution_character_set("utf-8")
#endif

선언해두고 

createWithSystemFont 함수로 읽을 한글 폰트를 갖다놓는다.

text = Label::createWithSystemFont("한글폰트야 나와라!!!!", "fontname.ttf", 50);

 근데 생각해보니까...따로 fonts 폴더에 폰트 넣은 뒤에

폴더 경로를 지정을 안해줬는데 잘 읽히네?

왜죠?

난관은 내가 원하는 위치에 텍스트를 출력하는 건데

이게 생각보다 잘 안된다. 어느 디바이스든 고르게 잘 출력하고 싶은데 안돼...

좌표계 헷갈려 ㅠㅠㅠ살려줘ㅠㅠㅠㅠㅠ

Post

Cocos2dx 소멸자 CCLog 에러

Cocos2dx 소멸자 CCLog 에러

이해할 수 없는 에러가 떴다...

왜 소멸자를 찾지 못하죠?

오류	LNK2019	"void __cdecl cocos2d::CCLog(char const *,...)"
(?CCLog@cocos2d@@YAXPBDZZ)"public: virtual __thiscall HelloWorld::~HelloWorld(void)"
(??1HelloWorld@@UAE@XZ) 함수에서 참조되는 확인할 수 없는 외부 기호
vg	H:\CocosProject\vg\HelloWorldScene.obj	1

근데 내가 자세히 안봐서...

소멸자를 못찾은게 아니라 CCLog 함수를 못찾은 것...

CCLOG 헤더 파일 CCPlatformMacros.h 를 include 하거나

cocos2d.h 헤더추가

Post

1. getVisibleOrigin 에서 가져오는 값이 뭘까?

auto visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();

출력해보니 Director::getInstance()->getVisibleSize();는 내가 지정한 해상도이다.

getVisibleOrigin()은 뭔지 잘 모르겠다. 코드보니 scale 사용하고 어쩌구 있는데 잘 모르겠으니

패스당...(할게 너무 많아ㅠㅠ)

visibleSize.width: 400.000000 height: 800.000000 origin x: 0.000000 y: 0.000000

Post

bool onTouchBegan(Touch* touch, Event* unused_event);

분명히 onTouchBegan 함수를 헤더에 선언했는데

빌드만 하면 에 멤버함수가 없습니다가 떠서 한 20분동안 미치는 줄 알았다.

확인해보니 함수 인자를 삭제하면 아예 에러가 안뜸.

그래서 Touch* touch, Event* unused_event 인자를 설마 다른 cocos::Touch가 아닌 다른 걸로 찾나 싶어서

네임스페이스를 명확하게 적어줬다.

bool onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* unused_event);

그러니까 에러 해결!

근데 내가 요근래 내 블로그로 타고들어오는 검색결과를 유심히 봤는데

cocos2dx에 관련해서 단 하나도 없어 ㅋㅋㅋㅋㅋ큐ㅠㅠㅠ 아이고 슬프다...

아 그리고 스케쥴 관련해서 함수가 아예 삭제되었길래 그냥 코코스3 씀

bool onTouchBegan(Touch* touch, Event* unused_event); 오버로드 된 멤버함수가 없습니다

Post

cocos2d-x Text

auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24, Size(100, 50), TextHAlignment::LEFT);

Size(100, 50)은 폰트가 출력될 상자의 크기라고 생각하면 된다.

100은 너비, 50은 높이다.

만약 너비보다 글자가 더 길다면 다음줄로 글자가 분리된다.

테스트해보니까 띄어쓰기를 기준으로 한단어로 치부해 다음줄로 이동시킨다.

높이도 마찬가지. 높이가 모자라면 글자는 잘리거나 보이지 않는다.

TextHAlignment::LEFT는 글자를 왼쪽 정렬한다.

TextVAlignment는 상하를 정렬한다. 글자가 너무 길어서 잘리는 경우에는

TextVAlignment::TOP일 경우엔 위쪽 텍스트만, TextVAlignment::BOTTOM일 때는 마지막 테스트만 보여준다.

기본값이 TextVAlignment::TOP 인 듯하다.

cocos2d-x Text 폰트, 색, 글자 변경

label->setTextColor(Color4B(255, 150, 150, 255));
label->setString("New Test!");
label->setAnchorPoint(Vec2(0, 0));
label->enableBold();
label->enableShadow(Color4B(255, 250, 250, 255), Size(10, 10), 90);
label->enableOutline(Color4B(255, 0, 0, 255), 10);
//label->disableEffect();

 

label의 Anchor는 0.5, 0.5이다.

label->enableBold()로 글자를 두껍게 만들 수 있다. 그런데 내가 글자에 색상을 지정한 후 bold효과를 주니

bold효과가 있는 곳은 하얀색으로 표시가 되었다;;; 음 이런것도 고쳐야 하는건가;;;

enableShadow(Color4B(255, 250, 250, 255), Size(10, 10), 90) 의 인수는 그림자의 색상, 그림자의 위치, 마지막은 흐림범위 인것 같은데 테스트해봐도 변동이 없어서 뭔지 모르겠다.

enableOutline(Color4B(255, 0, 0, 255), 10)은 글자 외곽선 효과이다. ttf 폰트만 가능하고 첫번째 인자는 외곽색깔이라고 두번째 인자는 두께이다.

 disableEffect()는 모든 효과를 삭제한다. 볼드나 그림자, 윤곽선 등... 글자 색상은 그대로 놔둔다.

cocos2d-x 한글출력

한글 폰트를 font 폴더에 넣어주고 헤더에 아래 전처리기 추가

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#pragma execution_character_set("utf-8")
#endif

 

Post

Rect

Rect로 범위를 지정하여 이미지에서 보여주고 싶은 부분만 보여줄 수 있다.

auto sprite = Sprite::create("HelloWorld.png", Rect(0, 0, 100, 150));

0, 0 좌표에서 너비 100, 높이 150만큼만 이미지를 가져온다.

그러면 아래처럼 너비 100에 높이 150인 이미지가 그려진 것을 확인할 수 있다.

그리고 그림으로 확인해보니 좌표계가 왼상단이 0,0이 되고 아래로 그림을 그려준다.

이는 cocos2d-x 좌표계와 다르니 유념할 것.

Scale

이미지의 크기를 키울 수 있다.

sprite->setScale(4.0);
sprite->setScaleX(2.0);
sprite->setScaleY(0.5);

setScale(4.0): 그림을 4배 키운다.
setScaleX(2.0): X축만 2배 키운다.
setScaleY(0.5): Y축만 절반으로 줄인다.

Rect처럼 일정 부분을 보여주는 게 아니라서

그림이 짜부라지거나 치즈처럼 늘어나는 그림이 보여지게 된다.

Rotation

sprite->setRotation(90);
sprite->setRotationSkewX(10);
sprite->setRotationSkewY(10);

setRotation(90): Z축을 중심으로 90도 회전. 우리가 일반적으로 알고있는 시계방향, 반시계 방향 회전이다.
setRotationSkewX(10): X축을 중심으로 10도 회전. Y축은 회전하지 않고 X축만 회전한다고 생각하면 된다. 
setRotationSkewY(10): Y축을 중심으로 10도 회전. X축은 회전하지 않고 Y축만 회전한다고 생각하면 된다. 

Flipe

sprite->setFlippedX(true);
sprite->setFlippedY(true);

상하좌우를 뒤집는 함수입니다.

setFlippedX(true): X축을 기준으로 좌우를 뒤집습니다. 
setFlippedY(true): Y축을 기준으로 상하로 뒤집습니다.

Opacity

sprite->setOpacity(40);

이미지의 불투명도를 조절한다. 0~255까지 값이 가능하다.

Visible

sprite->setVisible(false);

  setVisible(false): 화면에 보일 것 인지 보이지 않을 것인지 true, false로 셋팅한다.

Color

sprite->setColor(Color3B(255, 150, 150));

setColor로 R,G,B값을 0~255까지 줘서 이미지에 색을 입힐 수 있다.

▲ top