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 di script. Per saperne di più sul sistema di input, consulta il manuale introduttivo sull’input.
I trigger del mouse consentono di associare l’input dei pulsanti e delle rotelle del mouse alle azioni di gioco.

Gli input dei pulsanti del mouse MOUSE_BUTTON_LEFT, MOUSE_BUTTON_RIGHT e MOUSE_BUTTON_MIDDLE equivalgono a MOUSE_BUTTON_1, MOUSE_BUTTON_2 e MOUSE_BUTTON_3.
Gli esempi seguenti utilizzano le azioni mostrate nell’immagine sopra. Come per qualsiasi input, puoi assegnare alle azioni di input i nomi che preferisci.
I pulsanti del mouse generano eventi pressed, released e repeated. Questo esempio mostra come rilevare l’input del pulsante sinistro del mouse (quando viene premuto o rilasciato):
function on_input(self, action_id, action)
if action_id == hash("mouse_button_left") then
if action.pressed then
-- left mouse button pressed
elseif action.released then
-- left mouse button released
end
end
end
Le azioni di input MOUSE_BUTTON_LEFT (o MOUSE_BUTTON_1) vengono inviate anche per gli input a tocco singolo.
Gli input della rotella del mouse rilevano le azioni di scorrimento. Il campo action.value vale 1 se la rotella viene fatta scorrere e 0 altrimenti. (Le azioni di scorrimento vengono gestite come pressioni di pulsanti. Defold attualmente non supporta l’input di scorrimento preciso dei touchpad.)
function on_input(self, action_id, action)
if action_id == hash("mouse_wheel_up") then
if action.value == 1 then
-- mouse wheel is scrolled up
end
end
end
Il movimento del mouse viene gestito separatamente. Gli eventi di movimento del mouse vengono ricevuti solo se nei binding di input è configurato almeno un trigger del mouse.
Il movimento del mouse non viene associato nei binding di input: action_id viene impostato a nil e la tabella action viene popolata con la posizione del mouse e la variazione di tale posizione.
function on_input(self, action_id, action)
if action.x and action.y then
-- let game object follow mouse/touch movement
local pos = vmath.vector3(action.x, action.y, 0)
go.set_position(pos)
end
end
I trigger per tocchi singoli e multipli sono disponibili sui dispositivi iOS e Android nelle applicazioni native e nei bundle HTML5.

I trigger per tocchi singoli non si configurano nella sezione Touch Triggers dei binding di input. I trigger per tocchi singoli vengono invece configurati automaticamente quando configuri l’input di un pulsante del mouse per MOUSE_BUTTON_LEFT o MOUSE_BUTTON_1.
I trigger per tocchi multipli popolano una tabella chiamata touch all’interno della tabella dell’azione. Gli elementi della tabella sono indicizzati con i numeri interi 1–N, dove N è il numero di punti di contatto. Ogni elemento della tabella contiene campi con i dati di input:
function on_input(self, action_id, action)
if action_id == hash("touch_multi") then
-- Spawn at each touch point
for i, touchdata in ipairs(action.touch) do
local pos = vmath.vector3(touchdata.x, touchdata.y, 0)
factory.create("#factory", pos)
end
end
end
Ai tocchi multipli non deve essere assegnata la stessa azione dell’input del pulsante del mouse per MOUSE_BUTTON_LEFT o MOUSE_BUTTON_1. Assegnare la stessa azione sostituisce di fatto l’input a tocco singolo e impedisce di ricevere qualsiasi evento di tocco singolo.
Puoi usare l’asset Defold-Input per configurare facilmente controlli virtuali sullo schermo, come pulsanti e stick analogici, con supporto per tocchi multipli.
Rilevare quando l’utente fa clic o tocca un componente visivo è un’operazione molto comune, necessaria in molti giochi. Può trattarsi dell’interazione dell’utente con un pulsante o un altro elemento dell’interfaccia, oppure con un oggetto di gioco, come un’unità controllata dal giocatore in un gioco di strategia, un tesoro in un livello di un dungeon crawler o un personaggio che assegna missioni in un gioco di ruolo. L’approccio da usare varia a seconda del tipo di componente visivo.
Per gli elementi dell’interfaccia è disponibile la funzione gui.pick_node(node, x, y), che restituisce true o false a seconda che la coordinata specificata rientri o meno nei limiti di un nodo GUI. Per saperne di più, consulta la documentazione API, l’esempio del puntatore sopra un nodo o l’esempio di un pulsante.
Per gli oggetti di gioco, rilevare l’interazione è più complicato, perché fattori come la traslazione della camera e la proiezione dello script di rendering influiscono sui calcoli necessari. Esistono due approcci generali per rilevare l’interazione con gli oggetti di gioco:
Nell’asset Defold-Input puoi trovare una soluzione pronta all’uso che utilizza gli oggetti di collisione per rilevare l’input dell’utente, con supporto per trascinamenti e clic.
In entrambi i casi è necessario convertire le coordinate dell’evento del mouse o del tocco nello spazio dello schermo in coordinate nello spazio del mondo degli oggetti di gioco. Puoi farlo in diversi modi: