반응형
MLX 라이브러리
- 윈도우의 제어와 그래픽 작업을 위한 라이브러리.
- mlx라이브러리 내부의 mlx.h 파일을 인클루드 함으로써 MiniLibX API를 사용.
cc -L[mlx 폴더 경로] -lmlx -framework OpenGL -framework AppKit *.c
MiniLibx 함수
1. mlx_init
void * mlx_init(void)
- 나의 소프트웨어와 OS의 디스플레이를 연결해주는 함수.
- 사용법
#include "mlx.h"
int main()
{
void *mlx_ptr;
mlx_ptr = mlx_init();
}
2. mlx_new_window
void * mlx_new_window ( void mlx_ptr, int size_x, int size_y, char *title );
- 디스플레이에 새로운 윈도우를 띄우는 함수. 앞서 받아온 포인터와 가로 세로 크기, 그리고 창의 제목을 받아서 띄운다.
- size_x, size_y: 창 사이즈
- title: 창의 이름(바에 표시됨)
- mlx_ptr: mlx_init이 반환한 연결 소프트웨어 식별자
- 성공 시 다른 void* 인 창 식별자(이하 win_ptr)창 생성 실패 시 NULL
- MiniLibX는 n개의 각기 다른 창들을 제어할 수 있다. win_ptr은 각 창을 구분해주는 고유의 값이다.
- 사용법
#include "mlx.h"
int main()
{
void *mlx_ptr;
void *win_ptr;
mlx_ptr = mlx_init();
win_ptr = mlx_new_window(mlx_ptr, 500, 500, "mlx 42");
}
3. mlx_loop
int mlx_loop ( void *mlx_ptr );
- 이벤트를 기다리다가 특정 이벤트가 발생했을 때 사용자 정의 함수를 호출하는 무한 루프 함수다. 창을 계속적으로 랜더링 하기 위해서 사용된다.
- 띄운 창에서 키보드와 마우스의 입력을 기다린다. 혹은 창의 일부를 다시 그리는 역할도 함
#include "mlx.h"
int main()
{
void *mlx_ptr;
void *win_ptr;
mlx_ptr = mlx_init();
win_ptr = mlx_new_window(mlx_ptr, 500, 500, "mlx 42");
mlx_loop(mlx_ptr);
}
4. mlx_xpm_file_to_image
- prototype:
void *mlx_xpm_file_to_image(void *mlx_ptr, char *filename, int *width, int *height);
- 말 그대로 xpm 형식의 파일을 mlx에서 사용할 수 있는 이미지로 변환 해주는 함수다.
- filename: 사용할 xpm 파일의 이름
- width, height: 지정한 이미지의 너비, 지정한 이미지의 높이
- 성공 시 void*의 이미지 식별자(이하 img_ptr)실패 시 NULL
#include "mlx.h"
int main()
{
void *mlx_ptr;
void *win_ptr;
mlx_ptr = mlx_init();
win_ptr = mlx_new_window(mlx_ptr, 500, 500, "mlx 42");
img = mlx_xpm_file_to_image(game->mlx, file, &img_width, &img_height);
int x = 0; int y = 0;
mlx_put_image_to_window(game->mlx, game->win, img, x, y);
mlx_loop(mlx_ptr);
}
5. mlx_put_image_to_window
- prototype:
int mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr, int x, int y);
- 이미지를 윈도우에 그린다.
- img_ptr: 사용할 이미지의 식별자x, y: 이미지가 그려질 x, y 좌표
#include "mlx.h"
int main()
{
void *mlx_ptr;
void *win_ptr;
mlx_ptr = mlx_init();
win_ptr = mlx_new_window(mlx_ptr, 500, 500, "mlx 42");
img = mlx_xpm_file_to_image(game->mlx, file, &img_width, &img_height);
int x = 0; int y = 0;
mlx_put_image_to_window(game->mlx, game->win, img, x, y);
mlx_loop(mlx_ptr);
}
6. mlx_hook
- prototype:
int mlx_hook(void *win_ptr, int x_event, int x_mask, int (*funct)(), void *param);
- x_event에 지정된 이벤트가 발생할 때 마다 사용자 정의 함수를 호출한다. (키보드 또는 마우스 이벤트 처리)
- x_event: 이벤트의 코드 값
- x_mask: 사용하지 않는 함수, MAC에서는 마스크를 사용하지 않기 때문에 0으로 지정
- funct(): 이벤트가 발생했을 때 호출할 사용자 정의 함수
- param: 사용자 정의 함수로 보낼 인자
#include "mlx.h"
int main()
{
void *mlx_ptr;
void *win_ptr;
mlx_ptr = mlx_init();
win_ptr = mlx_new_window(mlx_ptr, 500, 500, "mlx 42");
img = mlx_xpm_file_to_image(game->mlx, file, &img_width, &img_height);
int x = 0; int y = 0;
mlx_put_image_to_window(game->mlx, game->win, img, x, y);
mlx_hook(game.win, X_EVENT_KEY_RELEASE, 0, &key_press, &game);
mlx_loop(mlx_ptr);
}
아래 링크에서 이벤트 코드에 대한 내용.
https://github.com/VBrazhnik/FdF/wiki/How-to-handle-mouse-buttons-and-key-presses%3F
42DOCS에서 볼 수 있는 이벤트 특징
- Keypress == 키를 눌렀을 때 인식
- KeyRelease == 키를 누르고 띠고 인식
그러면 이제 키보드를 누르게 되면 무엇을 눌렀는지 확인하게 해주어야한다. 그것을 key_code라 하는데 키보드에
각각 정수값이 저장된다.
- keycode에는 몇번 키보드인지 정보가 담긴다.
7. mlx_clear_window
- 윈도우 창을 검은색으로 초기화한다.
int mlx_clear_window(void *mlx_ptr, void *win_ptr);
8. mlx_destroy_window
- 윈도우 창을 삭제한다.
int mlx_destroy_window(void *mlx_ptr, void *win_ptr);
추가
1. mlx_loop_hook
int mlx_loop_hook (void *mlx_ptr, int (*funct_ptr)(), void *param);
- 이벤트가 발생하지 않을 때 호출되는 함수.
2. mlx_string_put
int mlx_string_put(void *mlx_ptr, void *win_ptr, int x, int y, int color, char *string);
- 지정한 문자열을 화면에 그린다
- x, y: 문자열이 그려질 x, y 좌표((0, 0)이 창의 좌측 상단)
- color: 문자열의 색(바이트 단위로 000-255 사이의
- 투명도|R|G|B|(0x00RRGGBB) 값)
- string: 화면에 그릴 문자열
함수들
key_code 이야기
[so_long, cub3D] Minilibx(mlx) 톺아보기
반응형
'42Seoul > so_long' 카테고리의 다른 글
so_long Makefile (0) | 2023.07.27 |
---|---|
DFS (0) | 2023.07.27 |
so_long 구현하기 앞서 전체 틀 (0) | 2023.07.27 |
so_long MiniLIbx 작동해보기 (0) | 2023.07.27 |
so_long MiniLibx 간단 소개 (0) | 2023.07.27 |