2023년 11월 21일 화요일

[cocos2d-x] 2d 게임엔진으로 플래피버드 클론 게임 만들기 (사용자 정의 콜백)

 


😭 자막이 잘못 들어갔습니다.

이번 영상의 제목은

[11강 사용자 정의 콜백] 입니다.

std::function과 람다식은 cocos2d-x의 기능이 아니라 c++에 정의된 문법입니다.

여기서는 cocos2d-x 개발에 필요한 정도만 다루겠습니다.

람다식은 이미 스케줄이나 터치 이벤트 구현할 때 다뤘는데

불필요한 클래스 정의나 함수 선언을 줄이기 위해 온갖 군데서 쓸 수 있으니까 유용합니다.

콜백이나 함수를 인자로 전달하는 모든 경우에 적절하게 쓸 수 있습니다.

람다식의 구조는

[](){ };

로 거칠게 요약할 수 있고,

[] <-외부에서 받아올 변수의 범위 (우리가 다룰 때는 굳이 신경쓰지 않아도 됩니다)

() <- 람다식에 전달할 인자

{} <- 람다식 몸통

이렇게 됩니다.

※인자와 몸통 사이에 리턴 타입을 정의하는데, 흔히 생략됩니다.

std::function은 함수를 객체로서 다루는 방법입니다.

실행할 함수를 객체로 만든다는 건 인자로 전달할 수 있다는 것이고,

인자로 전달받은 쪽에서는 필요할 때 이 인자를 함수 형태로 호출할 수 있습니다.

이번에 사용한 객체화 펑션은 리턴타입과 인수가 없는 형태인데요,

당연히 리턴타입이나 인수가 있는 형태를 정의할 수도 있습니다.

예를 들어

typedef std::function<void(int)> FUNC; FUNC cb;

같이 정의했다면, 콜백 때 인수로 정수값을 하나 돌려줄 수 있습니다.

cb(0);

이런 식으로.

이런 형태는 팝업창을 만들었고 팝업창에 여러개의 버튼(예/아니오, 한국어/영어/일어/독일어 등등)이 있을 경우

어느 버튼을 눌렀는지 인수로 돌려줄 때 사용할 수 있습니다.

이때 콜백에서 받는 람다식은

[=](int ret){ if(ret==0) { ..... } };

이런 식으로 기재하게 됩니다.

댓글 없음:

댓글 쓰기

[cocos2d-x] 2D 엔진으로 만드는 3D 슈팅게임

왜 2D 게임엔진으로 3D 게임 만들려고 삽질을 합니까?   예 뭐 3D 게임 만드는데 좋은 엔진은 아닙니다. 셰이더도 부실하고 물리엔진 쓰기도 까다롭고. 요즘은 외부업체 SDK 인트하기도 점점 힘들어지고.. ​ 그래도 기왕 해 본 거, 여기까지 왔으...