Joystick

Available since LÖVE 0.9.0
This type is not supported in earlier versions.

Represents a physical joystick.

Constructors

love.joystick.getJoysticks Gets a list of connected Joysticks. Added since 0.9.0

Functions

Joystick:getAxes Gets the direction of each axis. Added since 0.9.0
Joystick:getAxis Gets the direction of an axis. Added since 0.9.0
Joystick:getAxisCount Gets the number of axes on the joystick. Added since 0.9.0
Joystick:getButtonCount Gets the number of buttons on the joystick. Added since 0.9.0
Joystick:getDeviceInfo Gets the OS-independent device info of the joystick. Added since 11.3
Joystick:getGUID Gets a stable GUID unique to the type of the physical joystick. Added since 0.9.0
Joystick:getGamepadAxis Gets the direction of a virtual gamepad axis. Added since 0.9.0
Joystick:getGamepadMapping Gets the button, axis or hat that a virtual gamepad input is bound to. Added since 0.9.0
Joystick:getGamepadMappingString Gets the full gamepad mapping string of this Joystick, or nil if it's not recognized as a gamepad. Added since 11.3
Joystick:getGamepadType Gets the GamepadType of the Joystick, if it's recognized as a gamepad. Added since 12.0
Joystick:getHat Gets the direction of a hat. Added since 0.9.0
Joystick:getHatCount Gets the number of hats on the joystick. Added since 0.9.0
Joystick:getID Gets the joystick's unique identifier. Added since 0.9.0
Joystick:getJoystickType Gets the JoystickType of the Joystick. Added since 12.0
Joystick:getName Gets the name of the joystick. Added since 0.9.0
Joystick:getPlayerIndex Gets the player index of this Joystick. This corresponds to an indicator light on many common gamepads. Added since 12.0
Joystick:getSensorData Gets the latest data for the given sensor type for this Joystick Added since 12.0
Joystick:getVibration Gets the current vibration motor strengths on a Joystick with rumble support. Added since 0.9.0
Joystick:hasSensor Gets whether the specified sensor exists in the Joystick. Added since 12.0
Joystick:isConnected Gets whether the Joystick is connected. Added since 0.9.0
Joystick:isDown Checks if a button on the Joystick is pressed. Added since 0.9.0
Joystick:isGamepad Gets whether the Joystick is recognized as a gamepad. Added since 0.9.0
Joystick:isGamepadDown Checks if a virtual gamepad button on the Joystick is pressed. Added since 0.9.0
Joystick:isSensorEnabled Gets whether the specified sensor is currently enabled on this Joystick. Added since 12.0
Joystick:isVibrationSupported Gets whether the Joystick supports vibration. Added since 0.9.0
Joystick:setPlayerIndex Sets the player index of this Joystick. This corresponds to an indicator light on many common gamepads. Added since 12.0
Joystick:setSensorEnabled Enables or disables the specified sensor on this Joystick. Added since 12.0
Joystick:setVibration Sets the vibration motor speeds on a Joystick with rumble support. Added since 0.9.0
Object:release Immediately destroys the object's Lua reference. Added since 11.0
Object:type Gets the type of the object as a string.
Object:typeOf Checks whether an object is of a certain type.

Enums

GamepadAxis Virtual gamepad axes. Added since 0.9.0
GamepadButton Virtual gamepad buttons. Added since 0.9.0
GamepadType Types of gamepad controllers. Added since 12.0
JoystickHat Joystick hat positions. Added since 0.5.0
JoystickInputType Types of Joystick inputs. Added since 0.9.0
JoystickType Types of Joysticks. Added since 12.0

Supertypes

Examples

Display the last button pressed of a controller on-screen

local lastbutton = "none"

function love.gamepadpressed(joystick, button)
    lastbutton = button
end

function love.draw()
    love.graphics.print("Last gamepad button pressed: "..lastbutton, 10, 10)
end

Move a circle with the d-pad of a controller

function love.load()
    local joysticks = love.joystick.getJoysticks()
    joystick = joysticks[1]

    position = {x = 400, y = 300}
    speed = 300
end

function love.update(dt)
    if not joystick then return end

    if joystick:isGamepadDown("dpleft") then
        position.x = position.x - speed * dt
    elseif joystick:isGamepadDown("dpright") then
        position.x = position.x + speed * dt
    end

    if joystick:isGamepadDown("dpup") then
        position.y = position.y - speed * dt
    elseif joystick:isGamepadDown("dpdown") then
        position.y = position.y + speed * dt
    end
end

function love.draw()
    love.graphics.circle("fill", position.x, position.y, 50)
end

Move circles and change sizes with sticks

function love.load()
	local joysticks = love.joystick.getJoysticks()
	joystick = joysticks[1]

	leftCircle = {x = 200, y = 280, size = 50}
	rightCircle = {x = 600, y = 280, size = 50}
	speed = 300
end

function love.update(dt)
	if not joystick then return end

	leftCircle.x = leftCircle.x + dt*speed*joystick:getGamepadAxis("leftx")
	leftCircle.y = leftCircle.y + dt*speed*joystick:getGamepadAxis("lefty")
	
	rightCircle.x = rightCircle.x + dt*speed*joystick:getGamepadAxis("rightx")
	rightCircle.y = rightCircle.y + dt*speed*joystick:getGamepadAxis("righty")
end

function love.draw()
	local leftSize = (1-joystick:getGamepadAxis("triggerleft"))*leftCircle.size
	local rightSize = (1-joystick:getGamepadAxis("triggerright"))*rightCircle.size
	love.graphics.circle("fill", leftCircle.x, leftCircle.y, leftSize)
	love.graphics.circle("fill", rightCircle.x, rightCircle.y, rightSize)
end

See Also

Other Languages