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
Recomenda-se que você se familiarize com a forma geral como a entrada funciona no Defold, como receber entrada e em que ordem ela é recebida nos seus arquivos de script. Saiba mais sobre o sistema de entrada no manual Visão geral de entrada.
Mouse triggers permitem mapear entrada de botões do mouse e rodas de rolagem para ações do jogo.

As entradas de botão do mouse MOUSE_BUTTON_LEFT, MOUSE_BUTTON_RIGHT e MOUSE_BUTTON_MIDDLE são equivalentes a MOUSE_BUTTON_1, MOUSE_BUTTON_2 e MOUSE_BUTTON_3.
Os exemplos abaixo usam as ações mostradas na imagem acima. Como em toda entrada, você pode nomear suas ações de entrada da forma que quiser.
Botões do mouse geram eventos pressionados, soltos e repetidos. Exemplo mostrando como detectar entrada para o botão esquerdo do mouse (pressionado ou solto):
function on_input(self, action_id, action)
if action_id == hash("mouse_button_left") then
if action.pressed then
-- botão esquerdo do mouse pressionado
elseif action.released then
-- botão esquerdo do mouse solto
end
end
end
Ações de entrada MOUSE_BUTTON_LEFT (ou MOUSE_BUTTON_1) também são enviadas para entradas de toque único.
Entradas da roda do mouse detectam ações de rolagem. O campo action.value é 1 se a roda for rolada e 0 caso contrário. (Ações de rolagem são tratadas como se fossem pressionamentos de botão. Atualmente, o Defold não oferece suporte a entrada de rolagem fina em touchpads.)
function on_input(self, action_id, action)
if action_id == hash("mouse_wheel_up") then
if action.value == 1 then
-- a roda do mouse foi rolada para cima
end
end
end
O movimento do mouse é tratado separadamente. Eventos de movimento do mouse não são recebidos a menos que pelo menos um mouse trigger esteja configurado nos seus mapeamentos de entrada.
O movimento do mouse não é mapeado nos mapeamentos de entrada, mas action_id é definido como nil e a tabela action é preenchida com a localização e o delta de movimento da posição do mouse.
function on_input(self, action_id, action)
if action.x and action.y then
-- faz o objeto de jogo seguir o movimento do mouse/toque
local pos = vmath.vector3(action.x, action.y, 0)
go.set_position(pos)
end
end
Triggers do tipo toque único e multitoque estão disponíveis em dispositivos iOS e Android em aplicações nativas e em pacotes HTML5.

Triggers do tipo toque único não são configurados a partir da seção Touch Triggers dos mapeamentos de entrada. Em vez disso, triggers de toque único são configurados automaticamente quando você tem entrada de botão do mouse configurada para MOUSE_BUTTON_LEFT ou MOUSE_BUTTON_1.
Triggers do tipo multitoque preenchem uma tabela chamada touch na tabela de ação. Os elementos da tabela são indexados por inteiros com números de 1 a N, onde N é o número de pontos de toque. Cada elemento da tabela contém campos com dados de entrada:
function on_input(self, action_id, action)
if action_id == hash("touch_multi") then
-- Cria em cada ponto de toque
for i, touchdata in ipairs(action.touch) do
local pos = vmath.vector3(touchdata.x, touchdata.y, 0)
factory.create("#factory", pos)
end
end
end
Multitoque não deve receber a mesma ação da entrada de botão do mouse para MOUSE_BUTTON_LEFT ou MOUSE_BUTTON_1. Atribuir a mesma ação efetivamente substituirá o toque único e impedirá que você receba qualquer evento de toque único.
O asset Defold-Input pode ser usado para configurar facilmente controles virtuais na tela, como botões e sticks analógicos, com suporte a multitoque.
Detectar quando o usuário clicou ou tocou em um componente visual é uma operação muito comum necessária em muitos jogos. Pode ser uma interação do usuário com um botão ou outro elemento de UI, ou a interação com um objeto de jogo, como uma unidade controlada pelo jogador em um jogo de estratégia, algum tesouro em uma fase de dungeon crawler ou um personagem que entrega missões em um RPG. A abordagem a ser usada varia dependendo do tipo de componente visual.
Para elementos de UI, existe a função gui.pick_node(node, x, y), que retorna true ou false dependendo se a coordenada especificada está dentro dos limites de um node GUI ou não. Consulte a documentação da API, o exemplo de pointer over ou o exemplo de botão para saber mais.
Para objetos de jogo, detectar interação é mais complicado, pois coisas como translação da câmera e projeção do script de renderização afetarão os cálculos necessários. Há duas abordagens gerais para detectar interação com objetos de jogo:
Uma solução pronta para uso que usa objetos de colisão para detectar entrada do usuário com suporte a arrastar e clicar pode ser encontrada no asset Defold-Input.
Em ambos os casos, é necessário converter das coordenadas de espaço de tela do evento de mouse ou toque para as coordenadas de espaço de mundo dos objetos de jogo. Isso pode ser feito de algumas formas diferentes: