This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Ti consigliamo di familiarizzare con il funzionamento generale dell’input in Defold, con le modalità di ricezione dell’input e con l’ordine in cui viene ricevuto nei file script. Per saperne di più sul sistema di input, consulta il manuale di panoramica dell’input.
I trigger di input dei gamepad consentono di associare l’input standard dei gamepad alle funzioni del gioco. L’input dei gamepad offre binding per:

Gli esempi seguenti usano le azioni mostrate nell’immagine qui sopra. Come per tutti gli input, puoi assegnare alle azioni di input i nomi che preferisci.
I pulsanti digitali generano eventi pressed, released e repeated. Questo esempio mostra come rilevare l’input di un pulsante digitale (premuto o rilasciato):
function on_input(self, action_id, action)
if action_id == hash("gamepad_lpad_left") then
if action.pressed then
-- start moving left
elseif action.released then
-- stop moving left
end
end
end
Gli stick analogici generano eventi di input continui quando lo stick viene spostato al di fuori della zona morta definita nel file delle impostazioni dei gamepad (vedi sotto). Questo esempio mostra come rilevare l’input di uno stick analogico:
function on_input(self, action_id, action)
if action_id == hash("gamepad_lstick_down") then
-- left stick was moved down
print(action.value) -- a value between 0.0 an -1.0
end
end
Gli stick analogici generano anche eventi pressed e released quando vengono spostati nelle direzioni cardinali oltre un determinato valore di soglia. Questo permette di usare facilmente uno stick analogico anche come input direzionale digitale:
function on_input(self, action_id, action)
if action_id == hash("gamepad_lstick_down") and action.pressed then
-- left stick was moved to its extreme down position
end
end
Defold supporta più gamepad attraverso il sistema operativo host. Le azioni impostano il campo gamepad della tabella action sul numero del gamepad da cui proviene l’input:
function on_input(self, action_id, action)
if action_id == hash("gamepad_start") then
if action.gamepad == 0 then
-- gamepad 0 wants to join the game
end
end
end
I binding di input dei gamepad comprendono anche due binding distinti chiamati Connected e Disconnected, che rilevano quando un gamepad viene connesso (compresi quelli connessi fin dall’avvio) o disconnesso.
function on_input(self, action_id, action)
if action_id == hash("gamepad_connected") then
if action.gamepad == 0 then
-- gamepad 0 was connected
end
elseif action_id == hash("gamepad_disconnected") then
if action.gamepad == 0 then
-- gamepad 0 was disconnected
end
end
end
I binding di input dei gamepad comprendono anche un binding distinto chiamato Raw, che fornisce l’input non filtrato (senza applicare la zona morta) di pulsanti, assi e hat di qualsiasi gamepad connesso.
function on_input(self, action_id, action)
if action_id == hash("raw") then
pprint(action.gamepad_buttons)
pprint(action.gamepad_axis)
pprint(action.gamepad_hats)
end
end
La configurazione dell’input dei gamepad usa un file di mappatura distinto per ogni tipo di gamepad hardware. Le mappature per modelli hardware specifici vengono definite in un file gamepads. Defold include un file gamepads integrato con le impostazioni per i gamepad più comuni:

Se devi creare un nuovo file delle impostazioni dei gamepad, è disponibile un semplice strumento che può aiutarti:
Fai clic per scaricare gdc.zip.
Include eseguibili per Windows, Linux e macOS. Eseguilo dalla riga di comando:
./gdc
Lo strumento ti chiederà di premere diversi pulsanti sul controller connesso. Genererà quindi un nuovo file gamepads con le mappature corrette per il tuo controller. Salva il nuovo file oppure uniscilo al file gamepads esistente, quindi aggiorna l’impostazione in game.project:

Quando viene connesso un gamepad per cui non esiste una mappatura, questo genera soltanto le azioni connected, disconnected e raw. In questo caso devi associare manualmente i dati grezzi del gamepad alle azioni del gioco.
Puoi verificare se un’azione di input di un gamepad proviene da un gamepad sconosciuto leggendo il valore gamepad_unknown in action:
function on_input(self, action_id, action)
if action_id == hash("connected") then
if action.gamepad_unknown then
print("The connected gamepad is unidentified and will only generate raw input")
else
print("The connected gamepad is known and will generate input actions for buttons and sticks")
end
end
end
I gamepad sono supportati nelle build HTML5 e generano gli stessi eventi di input delle altre piattaforme. Il supporto dei gamepad si basa sulla Gamepad API, supportata dalla maggior parte dei browser (consulta questa tabella di compatibilità). Se il browser non supporta la Gamepad API, Defold ignora tutti i trigger di input dei gamepad nel progetto senza segnalarlo. Puoi verificare se il browser supporta la Gamepad API controllando se la funzione getGamepads esiste nell’oggetto navigator:
local function supports_gamepads()
return not html5 or (html5.run('typeof navigator.getGamepads === "function"') == "true")
end
if supports_gamepads() then
print("Platform supports gamepads")
end
Se il gioco viene eseguito all’interno di un iframe, devi anche assicurarti che all’iframe sia stata aggiunta l’autorizzazione gamepad:
<iframe allow="gamepad"></iframe>
Se il browser identifica un gamepad connesso come gamepad standard, viene usata la mappatura per Standard Gamepad nel file delle impostazioni dei gamepad (una mappatura Standard Gamepad è inclusa nel file default.gamepads in /builtins). Un gamepad standard è definito come un dispositivo con 16 pulsanti e 2 stick analogici, con una disposizione dei pulsanti simile a quella di un controller PlayStation o Xbox (per ulteriori informazioni, consulta la definizione e la disposizione dei pulsanti del W3C). Se il gamepad connesso non viene identificato come gamepad standard, Defold cerca nel file delle impostazioni dei gamepad una mappatura corrispondente al tipo di gamepad hardware.
Su Windows, al momento sono supportati solo i controller Xbox 360. Per collegare il controller 360 al computer Windows, assicurati che sia configurato correttamente.
I gamepad sono supportati nelle build Android e generano gli stessi eventi di input delle altre piattaforme. Il supporto dei gamepad si basa sul sistema di input Android per gli eventi dei tasti e di movimento. Gli eventi di input Android vengono convertiti in eventi dei gamepad di Defold usando lo stesso file gamepad descritto sopra.
Quando aggiungi altri binding dei gamepad su Android, puoi usare le seguenti tabelle di corrispondenza per convertire gli eventi di input Android nei valori del file gamepad:
| Da evento del tasto a indice del pulsante | Indice |
|---|---|
AKEYCODE_BUTTON_A |
0 |
AKEYCODE_BUTTON_B |
1 |
AKEYCODE_BUTTON_C |
2 |
AKEYCODE_BUTTON_X |
3 |
AKEYCODE_BUTTON_L1 |
4 |
AKEYCODE_BUTTON_R1 |
5 |
AKEYCODE_BUTTON_Y |
6 |
AKEYCODE_BUTTON_Z |
7 |
AKEYCODE_BUTTON_L2 |
8 |
AKEYCODE_BUTTON_R2 |
9 |
AKEYCODE_DPAD_CENTER |
10 |
AKEYCODE_DPAD_DOWN |
11 |
AKEYCODE_DPAD_LEFT |
12 |
AKEYCODE_DPAD_RIGHT |
13 |
AKEYCODE_DPAD_UP |
14 |
AKEYCODE_BUTTON_START |
15 |
AKEYCODE_BUTTON_SELECT |
16 |
AKEYCODE_BUTTON_THUMBL |
17 |
AKEYCODE_BUTTON_THUMBR |
18 |
AKEYCODE_BUTTON_MODE |
19 |
AKEYCODE_BUTTON_1 |
20 |
AKEYCODE_BUTTON_2 |
21 |
AKEYCODE_BUTTON_3 |
22 |
AKEYCODE_BUTTON_4 |
23 |
AKEYCODE_BUTTON_5 |
24 |
AKEYCODE_BUTTON_6 |
25 |
AKEYCODE_BUTTON_7 |
26 |
AKEYCODE_BUTTON_8 |
27 |
AKEYCODE_BUTTON_9 |
28 |
AKEYCODE_BUTTON_10 |
29 |
AKEYCODE_BUTTON_11 |
30 |
AKEYCODE_BUTTON_12 |
31 |
AKEYCODE_BUTTON_13 |
32 |
AKEYCODE_BUTTON_14 |
33 |
AKEYCODE_BUTTON_15 |
34 |
AKEYCODE_BUTTON_16 |
35 |
(Definizioni di KeyEvent in Android)
| Da evento di movimento a indice dell’asse | Indice |
|---|---|
AMOTION_EVENT_AXIS_X |
0 |
AMOTION_EVENT_AXIS_Y |
1 |
AMOTION_EVENT_AXIS_Z |
2 |
AMOTION_EVENT_AXIS_RZ |
3 |
AMOTION_EVENT_AXIS_LTRIGGER |
4 |
AMOTION_EVENT_AXIS_RTRIGGER |
5 |
AMOTION_EVENT_AXIS_HAT_X |
6 |
AMOTION_EVENT_AXIS_HAT_Y |
7 |
(Definizioni di MotionEvent in Android)
Usa questa tabella di corrispondenza insieme a un’app per testare i gamepad disponibile sul Google Play Store per individuare l’evento del tasto associato a ciascun pulsante del gamepad.