42Seoul/so_long

so_long MiniLibx 함수

재윤 2023. 7. 27. 17:24
반응형

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

 

How to handle mouse buttons and key presses?

School 42 project // 3D Wireframe Viewer. Contribute to VBrazhnik/FdF development by creating an account on GitHub.

github.com

42DOCS에서 볼 수 있는 이벤트 특징

  • Keypress == 키를 눌렀을 때 인식
  • KeyRelease == 키를 누르고 띠고 인식

Events

 

Events

Find code examples, optimization tricks, and much more.

harm-smits.github.io

 

그러면 이제 키보드를 누르게 되면 무엇을 눌렀는지 확인하게 해주어야한다. 그것을 key_code라 하는데 키보드에

각각 정수값이 저장된다.

  • keycode에는 몇번 키보드인지 정보가 담긴다.

key_code

 

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: 화면에 그릴 문자열

 

함수들

TIL 39일차 - [42서울] so_long

 

TIL 39일차 - [42서울] so_long

프로젝트를 끝내고 나니 블랙홀이 얼마 남지 않았다..🥲 9일 안에 과제를 뿌시고 살아남을 수 있을지... 정신차렷! 사실 42gg를 시작하기 전에 하루 정도 이 과제 발가락을 담갔다 뺐었다. 윈도우

velog.io

key_code 이야기

[42seoul] so_long

 

[42seoul] so_long

so_long은 2D 그래픽 게임을 구현하는 과제입니다.

velog.io

[so_long] mlx 라이브러리

 

[so_long] mlx 라이브러리

MLX 라이브러리란? 윈도우의 제어와 그래픽 작업을 위한 라이브러리다. mlx 라이브러리 내부의 mlx.h 파일을 인클루드 함으로써 MiniLibX API를 사용할 수 있다. > cc -L[mlx 폴더 경로] -lmlx -framework OpenGL -

velog.io

Prototypes

 

Prototypes

Find code examples, optimization tricks, and much more.

harm-smits.github.io

[so_long, cub3D] Minilibx(mlx) 톺아보기

 

[so_long, cub3D] Minilibx(mlx) 톺아보기

해당 글은 minilibx의 man page를 기반으로 작성하였습니다 Minilibx 란? 42에서 Unix/Linux 기반의 X-Window/X11이나 MacOS 기반의 AppKit 관련 지식 없이도 쉽게 graphical software를 만들 수 있도록 제공하

velog.io

 

반응형

'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