Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Code snippets for the Corona SDK Tutorial: Game controllers and axes (
-- Fetch all input devices currently connected to the system
local inputDevices = system.getInputDevices()
-- Traverse all input devices
for deviceIndex = 1, #inputDevices do
-- Fetch the input device's axes
print( deviceIndex, "andoridDeviceid", inputDevices[deviceIndex].androidDeviceId )
print( deviceIndex, "canVibrate", inputDevices[deviceIndex].canVibrate )
print( deviceIndex, "connectionState", inputDevices[deviceIndex].connectionState )
print( deviceIndex, "descriptor", inputDevices[deviceIndex].descriptor )
print( deviceIndex, "displayName", inputDevices[deviceIndex].displayName )
print( deviceIndex, "isConnected", inputDevices[deviceIndex].isConnected )
print( deviceIndex, "permenantid", tostring(inputDevices[deviceIndex].permanentId) )
print( deviceIndex, "type", inputDevices[deviceIndex].type )
-- OUYA may append the controller name to the end of the display name in a future update
-- Future-proof this by looking at the first few characters and, if necessary, parse it
local displayName = inputDevices[deviceIndex].displayName
if ( string.sub(displayName,1,20) == "OUYA Game Controller" then
displayName = string.sub( displayName,1,20 )
local descriptor = inputDevices[deviceIndex].descriptor
local inputAxes = inputDevices[deviceIndex]:getAxes()
-- Only look for Joysticks at the moment and map the controllers
if ( inputDevices[deviceIndex].type == "joystick" ) then
print( "We have a joystick; let's find some analog inputs!" )
if ( #inputAxes > 0 ) then
local controller = 0
for axisIndex = 1, #inputAxes do
if ( axisMap[displayName] and axisMap[displayName][axisIndex] ) then
axis[descriptor][axisMap[displayName][axisIndex]] = axisIndex
print( "mapped axis[" .. axisMap[displayName][axisIndex] .. "] to ", axisIndex )
-- Device does not have any axes!
print( inputDevices[deviceIndex].descriptor .. ": No axes found." )
print( "Not a Joystick" )
-- Keys were handled in a previous blog post, but let's handle them to
-- demonstrate how some axis values map to key events
local function onKeyEvent( event )
local phase = event.phase
local keyName = event.keyName
print( event.phase, event.keyName )
local message = "Key '" .. event.keyName .. "' was pressed " .. event.phase
myKeyDisplayText.text = message
return false
Runtime:addEventListener( "key", onKeyEvent )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.