달력

05

« 2018/05 »

  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  

'API'에 해당되는 글 32

  1. 2011.04.20 Catch Me If You Can_게임 동영상
  2. 2010.06.10 API-Catch Me If You Can
  3. 2010.05.10 API-ini파일
  4. 2010.05.10 API-알파값(비트맵 이미지 투명화)
  5. 2010.05.10 API-애니메이션
  6. 2010.05.10 API-PlaySound
  7. 2010.05.10 API-더블 버퍼링
  8. 2010.04.24 API-ChildWnd
  9. 2010.04.24 API-WindowLong
  10. 2010.04.24 API-WNDCLASSEX





이번 새로 이력서를 넣기 위해 게임 동영상을 찍다 보니, 여기에 올리는것도 좋을것 같아서 올리게 되네 ㅎ
Posted by 안식의후크
2010.06.10 11:15

API-Catch Me If You Can 게임이야기/제작2010.06.10 11:15





최종 버전

아직 좌표 수정이나 그런거 좀 있긴 하지만

완성본도 진작 떳지만 걍 지금 올림 ㅋㅋ





'게임이야기 > 제작' 카테고리의 다른 글

WrapUp!  (0) 2010.12.08
MapTool - 완성본  (0) 2010.12.06
API-Catch Me If You Can  (0) 2010.06.10
Chtch Me If You Can Ver 2.1  (0) 2010.05.08
Chtch Me If You Can Ver 1.0  (0) 2010.05.05
나의 정신적 지주 ㅋ  (1) 2010.05.02
Posted by 안식의후크
2010.05.10 21:58

API-ini파일 프로그래밍/API2010.05.10 21:58







특정 값이나, 상황, 옵션등을 설정하고 싶을 때, 프로그램 코드에서 설정하거나, 사용자에게 입력받는 방법도 존재 하지만,

모든 상황에 대해서 그 값을 입력받는다거나, 확인하는 작업이 그렇게 편리하지만은 않다.

그래서 존재 하는 것이 ini파일의 활용인데, (확장자만 바꾸면 꼭 ini가 아니여도 상관은 없지만, 보통 확장자를 ini로 많이 사용한다.)

크게 ini파일을 만들면,

세션 과 키값, 그리고 데이터로 분리된다.

[TEST1]
HP=1
MP=2

라는 식을 ini 파일이 가지고 있다고 했을 때

TEST1은 세션
HP, MP는 키값
1과 2는 데이터라고 보면 된다.

크게 어려운 것은 없고.

WritePrivateProfileString 를 사용해 세션을 만들고, 키 값을 만들고, 데이터를 삽입한다.

이 함수는 4개의 인자가 들어가는데, 세션, 키, 데이터, 파일의 (저장될)주소라고 보면 된다.

그리고
GetPrivateProfileString는
세션, 키, 데이터를 추출하지 못하였을때의 기본값, String의 저장 위치, 저장하는 곳의 공간, 파일의 주소
를 인자로 받게 되며 함수명에서 볼 수 있듯이, 파일에서 문자열을 받아 오기 위한 함수이다.

반대로
GetPrivateProfileInt는
세션, 키, 데이터가 저장된 장소, 파일의 주소를 인자라 보내주면
int형 값을 반환한다.

예제를 보면 훨씬 이해가 빠를 것이다.



소스를 실행하면, 경로에 의해 파일이 생성되고,
파일의 내용은

[TEST]
STR=This is Test
INT=92
[TEST2]
STR=This is Test
INT=92
[TEST3]
STR1=This iasdfs Test
INT1=921
STR2=Thisdfs is Test
INT2=912

다음과 같다.

// 실행 화면


A키를 누르고 S키를 누르게 되면 다음처럼 나온다.
만약 A키를 누르지 않고(즉 파일을 생성하지 않고) S키를 누르면

메시지는 ERROR,0 을 출력할 것이다.(단, 한번이라도 생성이 되었다면 파일이 삭제 되지 않는 이상은 옳바른 결과를 출력할 것이다.)

'프로그래밍 > API' 카테고리의 다른 글

API-GetAsyncKeyState( 키보드 입력함수 )  (1) 2010.06.28
API-ini파일  (0) 2010.05.10
API-알파값(비트맵 이미지 투명화)  (0) 2010.05.10
API-애니메이션  (0) 2010.05.10
API-PlaySound  (0) 2010.05.10
API-더블 버퍼링  (0) 2010.05.10
Posted by 안식의후크





사실 예전엔 알파값을 사용하기 위해 매우 복잡한 연산을 사용(비트연산)하였으나,

지금은 TransparentBlt를 함수를 사용하면 1줄로 아주 간편하게 특정 값에 대한 수치를 제거 할 수 있다.



다음과 같은 이미지에 붉은값( 255, 0, 0 )을 투명처리 하고 싶다고 하자.
흔히들 알파값, 컬러키 라고 많이 불리우는데,


예제 소스를 보면
TransparentBlt( hdc, 0, 0, 48*12, 48, MemDC, 0, 0, 48*12, 48, RGB(255, 0, 0) ); 를 사용해서 마지막 인자값으로 RGB(255,0,0)을 준것을 알 수 있다.

이렇게 하게 되면 이미지를 띄우던중 RGB값이 동일하다면, 그 동일한 값에 대해서 투명처리를 해주게 되니 매우 쉽게 투명값을 먹을 수 있다.
BitBlt과 다른 점이라고는 마지막에 MemDC에 존재하는 이미지의 크기값이 들어간다는것만 빼면 차이가 없다. 하지만 투명값을 입히게 되면
그 색상에 대해서는 절대 화면에 보여 줄 수 없게 되니, 자주 쓰는 붉은색 보다는 자주 쓰지 않는, 핑크나 그린을 추천한다.
물론 수치가 1만 변경되도 다른 수치로 보기 때문에,
붉은 색을 알파값으로 정하더라도, 실제 붉은 색의 색상이 들어 간다면 255,0,0이 아닌 254,0,0으로 해도 전혀 다른 색으로 보기 때문에 크게 문제가 되진 않을것이다.

단 주의점은, TransparentBlt를 사용하기 위해서는
#pragma comment(lib, "Msimg32.lib") 선언해 주거나,
프로젝트에 추가해 주어야 한다는 것을 기억하자.
// 실행화면

'프로그래밍 > API' 카테고리의 다른 글

API-GetAsyncKeyState( 키보드 입력함수 )  (1) 2010.06.28
API-ini파일  (0) 2010.05.10
API-알파값(비트맵 이미지 투명화)  (0) 2010.05.10
API-애니메이션  (0) 2010.05.10
API-PlaySound  (0) 2010.05.10
API-더블 버퍼링  (0) 2010.05.10
Posted by 안식의후크
2010.05.10 21:04

API-애니메이션 프로그래밍/API2010.05.10 21:04






애니메이션의 기본은 여러장, 또는 한장이지만 부분별로 쪼개어 번갈아 가면서 계속 보여줌으로써 애니메이션을 연출 할 수 있다.

긴 설명이 필요 할거 같지는 않고,

다음의 이미지를 번갈아서 출력한다고 생각해 보자.


이미지의 크기는 x축 48*12, y출 48이다.

따로 애니메이션을 플레이 해주는 함수가 존재하는 것은 아니고,

BitBlt 함수를 사용해 간단하게 화면에 뿌려 줄 수 있다.

예제를 보면 쉽게 이해 할 수 있다.

예제에서 보면

타이머를 사용해 frame를 수치를 조정하면서, 이미지를 48*fream, 0 으로 보여주는 것을 확인 할 수 있다.

즉 이미지 전체를 띄우는 것이 아니라.

이미지의 부분 부분을 잘라내어 특정 시간을 두고 조금씩 그 위치를 변경하는 것이다.

// 실행 화면
1부터 12까지 꾸준하게 번갈아 가면서 출력된다.

'프로그래밍 > API' 카테고리의 다른 글

API-ini파일  (0) 2010.05.10
API-알파값(비트맵 이미지 투명화)  (0) 2010.05.10
API-애니메이션  (0) 2010.05.10
API-PlaySound  (0) 2010.05.10
API-더블 버퍼링  (0) 2010.05.10
API-ChildWnd  (0) 2010.04.24
Posted by 안식의후크
2010.05.10 20:48

API-PlaySound 프로그래밍/API2010.05.10 20:48






API에서 음악을 출력하기 위해 사용하는, PlaySound라는 함수만 사용해 주면된다.

특별히 주의할 점은 없고.

딱히 소스를 첨부 하지도 않겠다.

단지 PlaySound라는 함수를 사용하기 위해서는,

프로젝트에서 winmm.lib를 링크 하거나,

#pragma comment(lib, "winmm.lib" )

를 선언해야 하며,

#include <MMSystem.h>가 필요하다.

PlaySound의 첫번째 인자는 파일의 주소 TEXT("test.wav") 식으로 선언해 주고,

두번째 인자는 리소스의 Wave 파일을 연주할 경우 그 핸들을 지정,

3번째에 플래그 값이 들어 가는데,

SND_ASYNC를 삽입해 주는 것이 가장 무난하다.

PlaySound( TEXT("test.wav"), NULL, SND_ASYNC); 처럼 사용해 주면 소리가 난다.

만약 배경음악 처럼 무한으로 나오게 하고 싶다면 플래스를 SND_LOOP로 해주면 된다.

그리고 그 무한의 사운드를 종료해 주고 싶다면 NULL 옵션을 사용해 다시 한번 호출해 주면 종료된다.

단 한가지 아쉬운 점은 기존에 사운드가 흘러 나오고 있을 때 또다시 함수를 호출하면 기존의 플레이 되던 사운드가 종료된 다는것이, 가장 큰 단점이 아닐까 싶다.

해결하기 위해선 MCI를 사용하면 될거 같다고 생각하는데, 그것에 대해선 그냥 지나치도록 하겠다.

'프로그래밍 > API' 카테고리의 다른 글

API-알파값(비트맵 이미지 투명화)  (0) 2010.05.10
API-애니메이션  (0) 2010.05.10
API-PlaySound  (0) 2010.05.10
API-더블 버퍼링  (0) 2010.05.10
API-ChildWnd  (0) 2010.04.24
API-WindowLong  (0) 2010.04.24
Posted by 안식의후크
2010.05.10 20:21

API-더블 버퍼링 프로그래밍/API2010.05.10 20:21






api에서 paint를 호출 할때 사용하는 InvalidateRect 함수는 특정 영역(또는 전 화면)을 지우고 다시 그려주는 일을 하게 되는데, 그 순서는

기존의 이미지 -> 특정 영역(모든 영역)을 화면에서 지운다 -> 다시 그려준다

(물론 그려주기 위해서 MemDC가 필요 하다.)
이런 구조를 지니게 되는데,

그렇기 때문에 가끔씩 느껴지는 깜박임 현상을 보게 된다.

그때 그 문제를 해결하기 위해서 더블 버퍼링이라는 기술을 사용하게 되는데,

따로 더블버퍼링 함수를 제공한다거나 하는것이 아니기 때문에 처음엔 많이 해맬 수 있다.

기존에 영역을 지우고 다시 그려주는 것이 아닌,

hdc가 뿌려준 기존의 화면 -> 다음에 그려줄 이미지를 BackDC에 임시 저장 -> BackDC에 내용을 MemDC에 삽입한다. -> MemDC에 내용을 hdc로 넘긴다. -> hdc에서 화면에 뿌려준다.

의 순서로 돌아간다.

그렇기 때문에 화면의 깜박임 현상을 제거 할 수 있는데, 그리고 지우는게 아니라

그리고 덮허씌운다, 라는 표현이 맞을것 같다.

예제를 보도록 하자.

이 처럼, 해주면 된다.

여기서 더이상 어떻게 설명을 해야 할지 모르겠다.

이해가 가지 않는다면, bitmap을 그릴때 어떤식으로 그리는지 부터 다시 파악하는 것을 추천한다.

프로그램을 실행하면, 검은 화면에 깜박이지 않는 어떠한 리소스가 좌우로 움직이는 것을 확인 할 수 있다.


// 실행 화면

'프로그래밍 > API' 카테고리의 다른 글

API-애니메이션  (0) 2010.05.10
API-PlaySound  (0) 2010.05.10
API-더블 버퍼링  (0) 2010.05.10
API-ChildWnd  (0) 2010.04.24
API-WindowLong  (0) 2010.04.24
API-WNDCLASSEX  (0) 2010.04.24
Posted by 안식의후크
2010.04.24 20:23

API-ChildWnd 프로그래밍/API2010.04.24 20:23





프로그램이 간단하다면 괜찮지만, 그렇지 않다면, 하나의 메인 윈도우 만으로는 한계가 있을 것이다.
그때 차일드 윈도우를 생성하여 사용 할 수 있다.

일단 예제를 보고 설명을 하나씩 하도록 하겠다.


예제에 달린 주석을 보면 크게 무리 없이 이해가 갈듯 하다,
RegisterClass를 사용해서 각각 설정을 다르게( 예제에서는 커서와, 호출함수명, 클래스네임, 배경화면)을 바꿔준것을 알 수 있다)
최초에는 WinMain에서는 메인 윈도우만 생성해 주고,
생성 후 WM_CREATE: 에서 또 다른 윈도우를 생성하고 있다.
생성 시에 옵션을 주석 부분처럼 해주게 되면,
새로운 창이지만 크게 티가 나질 않는다(마치 그냥 네모를 그린 느낌?)
그래서 일브로 설정을 약간 바꿔서 팝업으로 띄우게 하였다.

// 실행 화면

'프로그래밍 > API' 카테고리의 다른 글

API-PlaySound  (0) 2010.05.10
API-더블 버퍼링  (0) 2010.05.10
API-ChildWnd  (0) 2010.04.24
API-WindowLong  (0) 2010.04.24
API-WNDCLASSEX  (0) 2010.04.24
API-대화상자  (0) 2010.04.24
Posted by 안식의후크
2010.04.24 20:03

API-WindowLong 프로그래밍/API2010.04.24 20:03





CreateWindow로 윈도우를 만들 때 설정했던 윈도우의 속성들을 실행중에 조사하거나 바꾸고자 할때

LONG GetWindowLong(HWND hWnd, int nIndex);
LONG SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong);

이다.

이는 32비트용이고,

64비트를 지원하는 새로운 함수 원형은 다음과 같다.

LONG_PTR GetWindowLongPtr(HWND hWnd, int nIndex);
LONG_PTR SetWindowLongPtr(HWND hWnd, int nIndex, LONG_PTR dwNewLong);

쓰는 법은 똑같으며, 함수명 뒤에 Ptr이 붙고 LONG대신 LONG_PTR을 쓰는 정도의 차이밖에 없다고 한다.


특별한 기능은 없고, 실행 후 왼쪽 버튼을 누르면, 색상이 변경되고,
오른쪽 버튼을 누르면 마우스 포인터가 변경되는 간단한 예제이다.
특별히 살펴 볼 점은 SetClassLongPtr의 2번째 인자인데, 예제에서는 백그라운드를 관리하는 GCLP_HBRBACKGROUND와
커서를 관리하는 GCLP_HCURSOR 를 사용했었따는 점이다.

실행 화면은 pass 어차피 보여봤자, 백그라운드 색상 밖에 없으니까.

'프로그래밍 > API' 카테고리의 다른 글

API-더블 버퍼링  (0) 2010.05.10
API-ChildWnd  (0) 2010.04.24
API-WindowLong  (0) 2010.04.24
API-WNDCLASSEX  (0) 2010.04.24
API-대화상자  (0) 2010.04.24
API-Control(2)  (0) 2010.04.24
Posted by 안식의후크
2010.04.24 19:45

API-WNDCLASSEX 프로그래밍/API2010.04.24 19:45





기존의 Win16에서 Win32로 API가 업그레이드 되면서,

WNDCLASS에 멤버를 추가한 WNDCLASSEX 구조체를 대신 사용 할 수 있다.

특별히 추가된건 많이 없어 보이는데,

간단하게 살펴보자.

몇몇 바뀐게 있긴 하지만 기존의 창 생성과 큰 차이는 없어 보인다.
혹시라도 윈도우 생성에 실패하면 확인해 주기 위해 if문 수식이 추가 되었지만, 그건 신경쓰지 말고,
멤버는 2개가 추가 되었는데,
WNDCLASSEX를 사용하게되면, cbsize에 WNDCLASSEX를 sizeof로 보내주어야 한다.
그리고 CreateWindowEx에 첫번째 인자는 확장 스타일에 관한 것이다.
스타일이 꽤 많아서 도표로 만들진 않겠지만, 이중 경계선을 가진다던지, 비활성화중에도 가장 상위에 보여진다거나, 타이틀바를 오른쪽으로 정렬한다거나 하는 등, 괜찮아 보이는 스타일들이 확장되었다.

'프로그래밍 > API' 카테고리의 다른 글

API-ChildWnd  (0) 2010.04.24
API-WindowLong  (0) 2010.04.24
API-WNDCLASSEX  (0) 2010.04.24
API-대화상자  (0) 2010.04.24
API-Control(2)  (0) 2010.04.24
API-Control(1)  (0) 2010.04.24
Posted by 안식의후크