pods::...oystick(3pm)
๐ฎ SDL::Joystick โ the manual page, bestie edition ๐ฎ
okay so this is pods::...oystick(3pm) from the User Contributed Perl Documentation crew โ it's the SDL::Joystick page, aka SDL Bindings for the Joystick device. yes that's the NAME section, we're doing this properly ๐
โจ CATEGORY โจ
Core, Joystick. that's it, that's the vibe. ๐
โจ SYNOPSIS โจ
like, the whole thing in one go:
use SDL;
use SDL::Joystick;
SDL::init_sub_system(SDL_INIT_JOYSTICK);
die('no joystick found') unless(SDL::Joystick::num_joysticks());
my $joystick = SDL::Joystick->new(0);
literally that's the entire opening act ๐
๐ธ METHODS ๐ธ
๐ฆ num_joysticks
int SDL::Joystick::num_joysticks( void );
counts up all the joysticks you got and returns how many there are. no cap. ๐ฎ
๐ฆ name
string SDL::Joystick::name( index );
gets you the implementation dependent name of a joystick. the index param means "the N'th joystick on the system", iykyk.
my $num_joysticks = SDL::Joystick::num_joysticks();
printf("%d joysticks found\n", $num_joysticks);
for($i = 0; $i < $num_joysticks; $i++)
{
printf("%s\n", SDL::Joystick::name($i));
}
look at her go, naming every single one ๐ซถ
๐ฆ new
object SDL::Joystick->new( index );
opens a joystick for use within SDL. index is the N'th joystick in the system. super important: a joystick must be opened before it can be used, that's just the rules bestie ๐
# Initialize the joystick subsystem
SDL::init_sub_system(SDL_INIT_JOYSTICK);
# Check for joystick
if(SDL::Joystick::num_joysticks() > 0)
{
# Open joystick
my $joystick = SDL::Joystick->new(0);
if($joystick)
{
printf("Opened Joystick 0\n");
printf("Name: %s\n", SDL::Joystick::name(0));
printf("Number of Axes: %d\n", SDL::Joystick::num_axes($joystick));
printf("Number of Buttons: %d\n", SDL::Joystick::num_buttons($joystick));
printf("Number of Balls: %d\n", SDL::Joystick::num_balls($joystick));
}
else
{
printf("Couldn't open Joystick 0\n");
}
# Close if opened
SDL::Joystick::close($joystick) if SDL::Joystick::opened(0);
}
the whole lifecycle in one block, we love a self-contained icon โจ
๐ฆ opened
int SDL::Joystick::opened( index );
figures out whether a joystick has already been opened within the application. index = the N'th joystick on the system.
returns 1 if it's been opened, or 0 if it hasn't. simple as ๐
๐ฆ index
int SDL::Joystick::index( object );
returns the index of a given SDL_Joystick structure. check out SDL::Joystick::new if you need the backstory ๐
๐ฆ num_axes
int SDL::Joystick::num_axes( object );
returns the number of axes available from a previously opened joystick. see SDL::Joystick::new ๐
๐ฆ num_balls
int SDL::Joystick::num_balls( object );
returns the number of trackballs available from a previously opened joystick. see SDL::Joystick::new ๐ธ
๐ฆ num_hats
int SDL::Joystick::num_hats( object );
gets the number of joystick hats from a previously opened joystick. see SDL::Joystick::new ๐ฉ
๐ฆ num_buttons
int SDL::Joystick::num_buttons( object );
gets the number of joystick buttons from a previously opened joystick. see SDL::Joystick::new ๐
๐ฆ update
void SDL::Joystick::update();
updates the state (position, buttons, etc.) of all open joysticks. and here's the lil detail: if joystick events have been enabled with SDL::Joystick::event_state, then this gets called automatically in the event loop. so she's already on it ๐
๐ฆ get_axis
get_axis returns the current state of the given axis on the given joystick.
on most modern joysticks the X axis is usually represented by axis 0 and the Y axis by axis 1. the value returned by get_axis is a signed integer (-32768 to 32767) representing the current position of the axis โ and ngl you may need to impose certain tolerances on these values to account for jitter. the jitter is real ๐ญ
Note: some joysticks use axes2and3for extra buttons. plot twist.
returns a 16-bit signed integer representing the current position of the axis.
my $joystick = SDL::Joystick->new(0);
my $x_move = SDL::Joystick::get_axis($joystick, 0);
my $y_move = SDL::Joystick::get_axis($joystick, 1);
x and y, together, iconic ๐ซถ
๐ฆ get_hat
int SDL::Joystick::get_hat( object, int );
get_hat returns the current state of the given hat on the given joystick.
the current state comes back as an OR'd combination of one or more of these:
SDL_HAT_CENTEREDSDL_HAT_UPSDL_HAT_RIGHTSDL_HAT_DOWNSDL_HAT_LEFTSDL_HAT_RIGHTUPSDL_HAT_RIGHTDOWNSDL_HAT_LEFTUPSDL_HAT_LEFTDOWN
dirs on dirs on dirs ๐
my $joystick = SDL::Joystick->new(0);
my $position = SDL::Joystick::get_hat($joystick, 0);
print("hat is in position UP\n") if $position & SDL_HAT_UP;
๐ฆ get_button
int SDL::Joystick::get_button( object, int );
get_button returns the current state of the given button on the given joystick.
returns 1 if the button is pressed. otherwise, 0. pressed or not pressed, no in-between bestie ๐
my $joystick = SDL::Joystick->new(0);
my $num_buttons = SDL::Joystick::num_buttons($joystick);
for(my $i = 0; $i < $num_buttons; $i++)
{
printf("button %d is %s\n", $i, SDL::Joystick::get_button($joystick, $i) ? 'pressed' : 'not pressed');
}
SDL::Joystick::close($joystick) if SDL::Joystick::opened(0);
๐ฆ get_ball
int SDL::Joystick::get_ball(SDL_Joystick $joystick, int $ball, int $dx, int $dy);
get the ball axis change ๐ฑ
trackballs can only return relative motion since the last call to SDL::Joystick::get_ball โ these motion deltas are placed into dx and dy.
returns 0 on success or -1 on failure.
my $delta_x = 0;
my $delta_y = 0;
my $joystick = SDL::Joystick->new(0);
SDL::Joystick::update();
printf("TrackBall Read Error!\n") if(SDL::JoystickGetBall($joystick, 0, $delta_x, $delta_y) == -1);
printf("Trackball Delta- X:%d, Y:%d\n", delta_x, delta_y);
๐ฆ close
void SDL::Joystick::close( object );
closes a previously opened joystick. see SDL::Joystick::new ๐
SDL::Joystick::close($joystick) if SDL::Joystick::opened(0);
always close what you open, periodt ๐ฅ
๐ AUTHORS ๐
see AUTHORS in SDL. that's the whole section, she's brief and mysterious ๐ฆ
and that's the page babes ๐ written by the User Contributed Perl Documentation girlies,perl v5.42.0, dated2024-05-01โ go forth and open a joystick, or like, at minimum checkSDL::Joystick::num_joysticks()first ๐โจ
๐ฆ where this page comes from
- opensuse-leap 16.0: perl-SDL 2.548-bp160.1.13 ยท LGPL-2.1-or-later
- opensuse-leap 16.0: perl-SDL 2.548-bp160.1.13 ยท LGPL-2.1-or-later
- opensuse-leap 16.0: perl-SDL 2.548-bp160.1.13 ยท LGPL-2.1-or-later
- opensuse-leap 16.0: perl-SDL 2.548-bp160.1.13 ยท LGPL-2.1-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms