https://github.com/terry-yes/mlx_example 의 자료를 해석했습니다.
1. mlx_init()
소프트웨어와 화면을 연결
mlx 라이브러리 초기화
2. mlx_new_window(mlx, width, height, "SO_LONG");
SO_LONG 이라는 이름을 가지고 너비가 width, 높이가 height인 창 띄우기
3. 키보드와 연결하기 (MAC ver)
#define X_EVENT_KEY_PRESS 2
#define X_EVENT_KEY_release 3
#define X_EVENT_KEY_EXIT 17 //exit key code
//Mac key code example
//All the key code example other than below is described on the site linked in READEME.md
#define KEY_ESC 53
# define KEY_W 13
# define KEY_A 0
# define KEY_S 1
# define KEY_D 2
#define X_EVENT_KEY_PRESS 2
#define X_EVENT_KEY_release 3 ////근데 이라인은 삭제해도 동작하던데 왜 적는지 모르겠음, 그리고 실제로 함수에서 쓰지도 않는데.....ㅋㅎㅋㅎ
#define X_EVENT_KEY_EXIT 17
4. mlx_hook(win, X_EVENT_KEY_PRESS, 0, &key_press, ¶m);
int mlx_hook(void *win_ptr, int x_event, int x_mask, int (*funct)(), void *param);
+ 파라미터
- void *win_ptr : 윈도우 창 인스턴스 포인터
- int x_event : 후킹할 이벤트
- int x_mask : 후킹할 이벤트 (MAC에서는 사용하지 않음)
- int (*funct)() : 이벤트 발생시 호출할 함수(를 가리키는 포인터)
- void *param : 필요한 매개변수 저장
+ 반환
- int : 반환값이 없다.
>> 키를 누르는 이벤트를 후킹하고, 해당 이벤트가 일어나면 key_press 함수를 따른다. 이에 대한 결과는 param에 저장한다.
5. 이벤트에 따라 발생한 결과를 저장할 param에 대한 코드
//Since key_press() can recieve only one argument, all the argument shold be gathered in one structure
//x,y and str are meaningless variables.
typedef struct s_param{
int x;
int y;
} t_param;
//Only param->x will be used.
void param_init(t_param *param)
{
param->x = 0;
param->y = 0;
}
키보드에 따라 바뀐 위치(좌표)를 저장하도록 한다.
(과제에서도 키보드 입력에 따른 걸음수를 알려주길 원함)
6. 지정한 이벤트가 발생할 때 따를 함수에 대한 코드
int key_press(int keycode, t_param *param)
{
static int a = 0;
if (keycode == KEY_W)//Action when W key pressed
param->x++;
else if (keycode == KEY_S) //Action when S key pressed
param->x--;
else if (keycode == KEY_ESC) //Quit the program when ESC key pressed
exit(0);
printf("x: %d\n", param->x);
return (0);
}
w면 up, s면 down 하도록 구성되어 있음
7. mlx_loop(mlx);
아무 입력이 없을때 loop을 돌려서 프로그램이 종료하지 않고 계속 돌아가도록 해준다.
계속 돌아가고 있어야 들어오는 (키보드, 마우스 등등의)이벤트를 계속해서 받을 수 있으니까
[원본]
https://github.com/terry-yes/mlx_example
https://harm-smits.github.io/42docs/libs/minilibx/events.html#x11-events
'42seoul > circle-2' 카테고리의 다른 글
[so_long] 04. so_long 회고 (0) | 2022.04.27 |
---|---|
[so_long] 01. MiniLibX (2) | 2022.04.11 |
[so_long] 02. 텍스처, 스프라이트 그리고 .ber (0) | 2022.04.11 |
[so_long] 0. 과제 이해하기 (0) | 2022.03.29 |
[push_swap] 0. 과제 이해하기 (0) | 2022.03.05 |
댓글