cub3d/mlx/docs/Input.md
2023-10-25 13:56:45 +02:00

1.7 KiB

Input methods

MLX42 provides various ways of detecting input, you can read about all the available hooks on the Hooks page.

Key Detection

Generic Hook + function

The easiest way of detecting continuous keypressing is via a generic hook and then checking if the specific key is down. This is the 'traditional' way of detecting if a key is down even in modern game engines. It provides the quickest feedback and if it's used to, say, move a character, the smoothest result.

void	hook(void *param)
{
	mlx_t	*mlx;

	mlx = param;
	if (mlx_is_key_down(param, MLX_KEY_ESCAPE))
		mlx_close_window(param);
	if (mlx_is_key_down(param, MLX_KEY_UP))
		g_img->instances[0].y -= 5;
	if (mlx_is_key_down(param, MLX_KEY_DOWN))
		g_img->instances[0].y += 5;
	if (mlx_is_key_down(param, MLX_KEY_LEFT))
		g_img->instances[0].x -= 5;
	if (mlx_is_key_down(param, MLX_KEY_RIGHT))
		g_img->instances[0].x += 5;
}

Hook Function

For more exact input detection such as checking if the key was pressed with Alt or ctrl you should use the actual Key hook. Keep in mind that using a keyhook results in a slower feedback compared to using a generic hook but grants you more control in key detection.

void	key_hook(mlx_key_data_t keydata, void* param)
{
	if (keydata.key == MLX_KEY_A && keydata.action == MLX_RELEASE && keydata.modifier == MLX_CONTROL)
		puts("Gotta grab it all!");
}