[mlx] miniLibX활용 이미지 움직이기

J_JEON·2022년 5월 31일
0

miniLbiX

목록 보기
4/4

mlx 라이브러리

  • 렌더링을 위한 가장 기본적인 작업을 수행할 수 있는 작은 그래픽 라이브러리
  • 간단한 윈도우를 생성하고, 그리기, 이벤트관리 등을 제공함
  • mlx.h 파일을 include 하여 사용가능
  • 컴파일시 gcc -L(mlx폴더) -lmlx -framework OpenGL -framework - AppKit *.c

miniLibX활용 이미지 움직이기

#include <stdio.h>
#include "mlx/mlx.h"

typedef struct s_param
{
	void	*mlx;
	void	*win;
	void	*c;
	void	*g;
	void	*w;
	size_t	fd;
	int		x;
	int		y;
	int		wi;
	int		he;
	int		win_width;
	int		win_height;
}	t_param;

#define KEY_ESC			53
#define KEY_W				13
#define KEY_S				1
#define KEY_A				0
#define KEY_D				2
#define PRESS_RED_BUTTON	17

int	key_press(int keycode, t_param *param)
// 입력에따라 좌표로 사용할 값을 증감시킴
{
	if (keycode == KEY_W && param->y != 0)
		param->y -= param->he;
	if (keycode == KEY_S && param->y != 480)
		param->y += param->he;
	else if (keycode == KEY_A && param->x != 0)
		param->x -= param->wi;
	else if (keycode == KEY_D && param->x != 480)
		param->x += param->wi;
	else if (keycode == KEY_ESC)
		exit(0);
	printf("y: %d x: %d\n", param->y, param->x);
	return (0);
}

int	draw(t_param *loc)
{
	mlx_clear_window(loc->mlx, loc->win); //기존에 그려놨던 윈도우를 지워줌
	mlx_put_image_to_window(loc->mlx, loc->win, loc->c, loc->x, loc->y);
    //새로운 좌표를 이용한 새 위치에 이미지를 그려줌
	return (0);
}

int	main(void)
{
	t_param		par;

	par.mlx = mlx_init();
	par.c = mlx_xpm_file_to_image(par.mlx, "imgs/c.xpm", &par.wi, &par.he);
	par.win = mlx_new_window(par.mlx, 1000, 1000, "DrawMap");
	par.x = 0;
	par.y = 0;
	mlx_key_hook(par.win, &key_press, &par);
    //키보드 입력을 받아줌
	mlx_loop_hook(par.mlx, &draw, &par);
    //이미지를 지우고 다시 그려주는 draw함수를 이벤트마다 실행해줌
	mlx_loop(par.mlx);
	return (0);
}
  • 결과
profile
늅늅

0개의 댓글