반응형

전체 글 214

C++ system_clock을 이용하여 64bit tick값 저장 및 로드 예제

게임의 아이템 등 여러 곳에서 데이터의 시간 값을 저장하고 로드합니다. 여기서는 system_clock을 이용하여 시간 값을 64bit 변수로 저장하고 로드하는 예제를 살펴보도록 하겠습니다. 참고로 변수 값은 보통 실무 프로젝트에서는 tick이라고 불리웁니다. 예제에서는 실제로 값을 저장하지는 않지만 long long 값인 tick 값을 64bit 변수 값으로 DB 등에 저장하고 로드하면 됩니다. #include #include using namespace std; using namespace chrono; int main(int argc, char* argv[]) { system_clock::time_point now = system_clock::now(); long long tick = now.tim..

C++ 프로그래밍 2022.03.28

C++ 람다를 활용하여 함수 내 중복 코드 줄이기

람다는 정말로 활용하면 할수록 유용한 기능인 듯합니다. 막상 활용하기 시작하니 람다 없던 시기의 코드에 비하여 코드의 양도 줄어들고 코드도 이해하기가 더 쉬워지는 듯 합니다. 이 글에서는 람다를 활용하여 함수내 중복 코드를 제거하는 예를 살펴보겠습니다. 아래 코드는 제가 작성한 코드로 실제 프로젝트에서 흔희 볼 수 있는 반복적인 코드입니다. 코드 내용은 중요하지 않으니 형태만 참고하시면 됩니다. switch (nSBCode) { case SB_LINEUP: pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() - 1); if (chartUse_.test(IDX_CHART_SUB)) chartSub_->ScrollX(pScrollBar->GetScrollPos());..

C++ 프로그래밍 2022.03.23

MFC 다이얼로그에서 컨트롤 관련 깜박임 문제 해결

컨트롤에서 자식 컨트롤 관련하여 MoveWindow등을 사용하여 위치나 크기를 변경하였을 때, 컨트롤에서 깜박임(flickering) 현상이 발생합니다. 이때 페인트되는 영역에서 자식 컨트롤 부분을 제외하기 위하여 컨트롤 속성에 WS_CLIPCHILDREN 속성을 주면 깜박임 문제를 해결할 수 있습니다. 비슷한 예로 컨트롤에 더블버퍼링 등을 적용하여도 다이얼로그(dialog)에 있는 컨트롤(control)에 대해서 MoveWindow 등을 사용하여 위치나 크기를 변경하면 깜박임 (flickering) 현상이 발생합니다. 이럴 때는 다이얼로그에 WS_CLIPCHILDREN 속성을 아래 스크린샷처럼 설정하여 주면 깜박임 문제를 해결할 수 있습니다.

iOS 시뮬레이터에서 터치 동그라미 보이게 하기

iPhone이나 iPad와 같은 iOS개발을 할 때, 특히 멀티터치와 같은 경우 테스트하기 위하여 시뮬레이터에서 터치 동그라미(손가락 동그라미, 핑거 서클, Finger Circle)을 볼 수 있습니다. 사용 방법은 option(alt) key를 누르고 마우스를 클릭하면 됩니다. 두개의 터치를 같이 움직이고자 할 때는 Shift키도 같이 누르고 있으면 됩니다. 키를 눌렀지만 화면에 터치 동그라미가 안보이면 아래 처럼 Simulator > Preference에서 설정하여 주면 됩니다. 저와 같은 경우 기본 값이 설정되어 있지 않아서 별도로 아래 처럼 설정하였습니다.

iOS 프로그래밍 2022.03.17

MFC 모든 차일드 윈도우 얻어오는 방법

wchar_t className[255]; CWnd* child = this->GetWindow(GW_CHILD); while (child) { ::GetClassName(child->GetSafeHwnd(), className, sizeof(className) / sizeof(wchar_t)); TRACE(L"%s\n", className); child = child->GetWindow(GW_HWNDNEXT); } MFC에서 현재 윈도우의 모든 자식 윈도우을 얻어와 자식 윈도우의 등록된 클래스 이름을 디버그로 표시하는 예제입니다. 해당 예제는 CWnd를 상속받은 클래스에서 동작하는 예제입니다. CWnd를 상속받지 않은 다른 곳에서 사용할 때는 약간의 응용이 필요합니다.

MFC 커스텀컨트롤에서 CWnd의 OnCreate 불리지 않는 문제 해결법

MFC의 커스텀컨트롤은 생성되기 전에는 서브클래싱이 일어나지 않습니다. 그런 관계로 커스텀컨트롤에 대입된 CWnd 상속 객체의 WM_CREATE메세지에 대한 대응 함수인 OnCreate가 호출되지 않습니다. 물론 서브클래싱이 일어난 이후에는 모든 메세지에 대한 CWnd 함수가 정상적으로 호출됩니다. 그런데 커스텀컨트롤에서 차일드 컨트롤을 만드는 일과 같이 OnCreate에서 하면 좋은 작업이 있습니다. 이럴 때는 CWnd의 PreSubclassWindow 함수를 재정의하고 여기에서 해주면 됩니다. 관련 참고는 아래와 같습니다. why oncreate() not called

폭격방어자 포스트모템 #5: 기타

최근 1년간 폭격방어자(영문판: Bombing Defender, 일어판: 爆撃の防御者)란 게임을 개발하였습니다. 게임은 터치로 하는 모바일 슈팅 게임입니다. 경험을 해보니 1인 개발은 정말로 다양한 역활로 할게 많습니다. 물론 각 역활을 깊게 들어가지는 못하여 전문가로서의 한계는 있습니다. 하지만 각 부분이 느끼는 다양한 희노애락을 느낄 수 있었습니다. 늘상 새로운 툴을 배워서 써야하고 새로운 분야에서 새로운 것을 만들어야 한다는 것은 고통의 연속이었습니다. 반대로 그걸 해결하고 게임이 완성되어 가는 것을 보는 것에서 보람과 만족감을 느낄 수 있어 좋았습니다. 무언가 전체적인 과정을 혼자 만들면서 느끼는 행복은 한 분야의 전문가로서 만들면서 느끼는 그것과는 조금 다른 느낌이었습니다. 게임은 종합 예술입니..

개발이야기 2022.02.21

폭격방어자 포스트모템 #4: 그래픽과 사운드

최근 1년간 폭격방어자(영문판: Bombing Defender, 일어판: 爆撃の防御者)란 게임을 개발하였습니다. 게임은 터치로 하는 모바일 슈팅 게임입니다. 해당 게임은 풀HD(1920x1080)를 기준으로 만든 게임입니다. 모바일 기기의 해상도가 워낙 다양하여 처음에 어느 해상도로 기준점을 잡을까 고민하다 가장 많이 쓰는 해상도인 풀HD로 잡았습니다. 모든 리소스는 풀HD를 기준으로 작성되었습니다. 움직이는 작은 물체와 같은 경우는 상관없는데 배경같은 경우는 해상도 변화에 따라 약간의 프로그래밍 작업을 필요로 하였습니다. 저해상도와 같은 경우는 별로 상관없는데 16:9의 풀HD 해상도와 비율이 많이 틀려지는 경우에는 가변 해상도 레이아웃이나 배경의 변화를 체크하여야 했습니다. 거기에 최악의 경우 풀HD..

개발이야기 2022.02.20

폭격방어자 포스트모템 #3: 프로그래밍

최근 1년간 폭격방어자(영문판: Bombing Defender, 일어판: 爆撃の防御者)란 게임을 개발하였습니다. 게임은 터치로 하는 모바일 슈팅 게임입니다. 해당 게임은 유니티로 개발하였습니다. 처음 파일럿 데모로 프로그램을 작성한 뒤 언리얼과 코코스 2D로 개발할까도 생각해 보았습니다. 언리얼은 살펴보았을 때 만들려는 게임은 2D인데 2D보다는 3D에 적합해보였습니다. 또한 언리얼은 전반적인 엔진의 느낌이 회사에서 개발하는 AAA급 게임에 적합하여 보았습니다. 1인 개발하는 입장에서 언리얼 수준의 그래픽을 만들어 내기는 힘들어 보였습니다. 코코스 2D와 같은 경우는 당시에 유니티를 유튜브로 빠르게 익히는 중이라 한글 유튜브 관련 좋은 자료가 없는게 아쉬웠습니다. 코코스 2D는 모바일 2D에 가장 강력하..

개발이야기 2022.02.19

폭격방어자 포스트모템 #2: 기획

최근 1년간 폭격방어자(영문판: Bombing Defender, 일어판: 爆撃の防御者)란 게임을 개발하였습니다. 게임은 터치로 하는 모바일 슈팅 게임입니다. 게임계에서도 일했지만 게임 기획이라는 것을 처음 해보았습니다. 1인 개발이고 빠르게 개발하기 위해서라기 보다는 귀찮아서 따로 문서를 남기지는 않았습니다. 대신 프로그래머고 1인 개발을 하다보니까 기획서 대신 기획한 내용을 바로 바로 데모로 작성하였습니다. 일종의 데모 게임으로 돌아가는 기획서라고 할 수 있겠습니다. 실제로 만든 게임은 데모용 데이터 파일을 먼저 만들었습니다. 해당 데이터는 실제 게임처럼 난이도가 아닌 적 비행기의 패턴과 나오는 그룹 형태에 따라 스테이지가 구분되어 있습니다. 실제 게임은 해당 데모의 스테이지들을 응용하여 난이도에 따라..

개발이야기 2022.02.18

폭격방어자 포스트모템 #1: 1인 개발

최근 1년간 폭격방어자 (영문판: Bombing Defender, 일어판: 爆撃の防御者) 란 게임을 개발하였습니다. 게임은 터치로 하는 모바일 슈팅 게임입니다. 게임 프로그래밍을 익힐겸 유니티 관련 강좌를 보고 슈팅 관련 습작을 만들다가 아이디어가 떠올라 거의 1년간 만든 게임입니다. 기획, 그래픽, 음악, 프로그래밍을 모두 담당한 1인 개발로 만들었습니다. 특징적인 것은 몇 가지 프리 이미지와 효과음을 제외하고는 외주나 에셋 구매 없이 순수 1인 개발에 가깝게 개발하였다는 것입니다. 말로만 듣던 1인 개발을 실제로 해보니 몇 가지 긍정적인 점이 느껴졌습니다. 우선 게임 개발을 보는 시야가 넓어졌습니다. 회사에서 팀으로 개발할 때는 전문 분야 위주로 개발하다보니 관련 분야는 깊이 있게 이해하게 되지만 그..

개발이야기 2022.02.16

爆撃の防御者 個人情報の処理方針[Android]

爆撃の防御者 個人情報の処理方針[Android] 爆撃の防御者と同開発者はプライバシーを心から尊重します 爆撃の防御者はGoogleがユーザーからご同意を得た上で同開発者に提供したデータ以外、第三者分析や広告フレームワークを使用しません。 爆撃の防御者はユーザーに関するいかなる個人情報も残さず、同サービス目的が達成された後は、直ちに廃棄します。 爆撃の防御者はユーザーについての個人的なデータを求めたり集めたり伝送したり配布しません。 担当者コンタクト先: chun75@daum.net

Bombing Defender 2022.02.14

爆撃の防御者

退屈だったりストレスを受けた時に楽しめるタッチシューティングゲーム! 携帯電話やタブレットを携帯用ゲーム機に変えてみてください! ストーリー 宇宙人が地球の飛行船を盗んで都市と村を爆撃します。 敵飛行船の爆撃を防御し、都市と町を保護してください。 ゲームについて 素早くタッチして都市と町を爆撃するすべての飛行船と爆弾を壊して都市と町を保護してください。 途中で出てくる鳥が与える様々なアイテムで、ゲーム中の危機から抜け出してください。 一定確率で出るクリティカルヒットとダブルクリティカルヒットで瞬間的に2倍から4倍のダメージで敵を破壊してください。 10ステージあたりのボスをクリアしてください。 各ボスごとの攻略法が存在するため、単純に速い手だけでは難しいかもしれません。 特にボス戦ではボスエネルギーがどれだけ残っているかを見ながらプレーすると良いでしょう。 ボスをクリアするたびにエネル..

Bombing Defender 2022.02.07
반응형