so_long과제는 외부 그래픽 라이브러리를 이용하여 간단한 2D게임을 만들어 보는 과제입니다 수집품을 모아서 포탈로 탈출하면되는 간단한 게임이죠 !
MinilibX
minilibx는 과제에서 주어지는 그래픽관련 함수들이 모아져있는 라이브러리이다
mlx_init()
void *mlx_init();
디스플레이 장치와 연결하여 연결에 대한 식별자를 void *타입의 포인터로 반환한다 (디스플레이 장치와의 연결에 실패하게 되면 NULL을 반환한다)
mlx_new_window
void *mlx_new_window(void *mlx_ptr, int size_x, int size_y, char *title);
window의 width 값 height값을 받아서 새로운 window를 만들어준다
- mlx_ptr : 디스플레이 장치와 연결된 *mlx_ptr을 인자로 받는다
- size_x : 화면에 표시될 window의 width 값을 의미한다
- size_y : 화면에 표시될 window의 height 값을 의미한다
- title : 화면에 표시될 window의 이름을 의미한다
- 반환값 : window에 대한 식별자를 void *타입의 포인터로 반환한다
mlx_clear_window
int mlx_clear_window(void *mlx_ptr, void *win_ptr);
window의 화면을 초기화해준다.
- mlx_ptr : 디스플레이 장치와 연결된 *mlx_ptr을 매개변수로 받는다
- win_ptr : window와 연결된 *win_ptr을 매개변수로 받는다
- 반환값 : 함수원형에는 반환값이 int형으로 표시되어있지만 실제로는 반환되는값이 존재하지않는다
mlx_new_image
void *mlx_new_image(void *mlx_ptr, int width, int height);
image의 width와 height를 받아 image를 생성하고 void *형으로 반환해준다
- mlx_ptr : 디스플레이 장치와 연결된 *mlx_ptr을 매개변수로 받는다
- width : image의 width size를 지정해준다
- height : image의 height size를 지정해준다
- 반환값 : image에 대한 식별자를 void *타입의 포인터로 반환해준다 (Image 생성에 실패하면 NULL포인터를 반환한다)
mlx_put_image_to_window
int mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr, int x, int y);
- mlx_ptr : 디스플레이 장치와 연결된 *mlx_ptr을 매개변수로 받는다
- win_ptr : window와 연결된 *win_ptr을 매개변수로 받는다
- img_ptr : image와 연결된 *img_ptr을 매개변수로 받는다
- x : image를 window에 표시할 width좌표를 입력 받는다
- y : image 를 window에 표시할 height좌표를 입력 받는다
- 반환값 : 함수의 원형에서는 반환값이 int형으로 표시되어있지만 실제로는 반환되는 값이 존재하지 않는다
mlx_xpm_file_to_image
void * mlx_xpm_file_to_image(void *mlx_ptr, char *filename, int *width, int *height);
mlx_new_image 함수를 호출하여 image공간을 만들고 filename(xpm 이미지)를 이용하여 그 공간을 채워준다
- mlx_ptr : 디스플레이 장치와 연결된 *mlx_ptr을 매개변수로 받는다
- filename : xpm file의 이름을 매개변수로 받는다
- width : width size를 image의 width size만큼 초기화해준다
- height : height size를 image의 height size만큼 초기화해준다
- 반환값 : image에 대한 식별자를 void *타입의 포인터로 반환해준다 (image 생성에 실패하게 되면 NULL을 반환한다)
mlx_loop
int mlx_loop(void *mlx_ptr);
무한히반복되는 loop를 시작한다 loop진행 중에는 Event에 따른hook함수들이 호출되며 그외 함수들은 동작하지 않는다
- mlx_ptr : 디스플레이 장치와 연결된 *mlx_ptr을 매개변수로 받는다
- 반환값 : 함수의 원형에서는 반환값이 int형으로 표시되어있지만 실제로는 반환되는 값이 존재하지 않는다
mlx_key_hook
int mlx_key_hook(void *win_ptr, int (*funct_ptr)(), void *param);
키보드 버튼에 대한 Event가 발생했을 때 콜백함수를 호출하는 hook함수이다
👀콜백함수 : 다른 함수의 인자로서 넘겨진 후 특정 이벤트에 의해 호출되는 함수를 의미한다
- win_ptr : window와 연결된 *win_ptr을 매개변수로 받는다
- funct_ptr : Event가 발생했을 때 호출할 콜백함수를 함수포인터로 받는다
- 내부적으로 콜백함수를 호출할때 아래와 같은 형태로 호출하기 때문에 funct_ptr은 아래와 같은 형태의 함수로 만들어져야한다
int key_hook(int keycode, void *param);
keycode는 X11의 keysymdef.h에 정의된 값을 따르며 해당 이미지를 참고하자
- param : 콜백함수 내에서 사용할 인자를 매개변수로 넣어준다
mlx_hook
int mlx_hook(void *win_ptr, int x_event, int x_mask, int (*funct)(), void *param);
x_event에 해당하는 event가 발생했을시 콜백함수를 호출하는 hook함수이다
- win_ptr : window와 연결된 *win_ptr을 매개변수로 받는다
- x_event : x11의 x.h안에 각각의 event들에 대해서 정의되어져 있다
링크 : X11/X.h
- x_mask : mac_os에서는 mask값이 사용되지 않기 때문에 0을 지정하여 사용하지 않는 인자임을 암시한다
- funct_ptr : Event가 발생했을 때 호출할 콜백함수를 함수포인터로 받는다
- param : 콜백함수 내에서 사용할 인자를 매개변수로 넣어준다
mlx_loop_hook
int mlx_loop_hook(void *mlx_ptr, int (*funct_ptr)(), void *param);
loop가 반복되어질 때 마다 event가 발생하지 않았으면 호출되는 함수이다
- mlx_ptr : 디스플레이 장치와 연결된 *mlx_ptr을 매개변수로 받는다 다른 hook함수와 다르게 mlx_ptr을 인자로 받아 window단위로 실행되는 것이 아닌 screen단위로 동작하는것을 알 수 있다
- funct_ptr : loop_hook함수가 호출될때 동작할 콜백함수를 지정해준다
- 콜백함수는 아래와 같은 형식으로 작성하면 된다
int loop_hook(void *param);
- param : 콜백함수 내에서 사용할 인자를 매개변수로 넣어준다
참고링크 팔만코딩경 mlx.h