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.
Gamepad triggers permitem mapear entrada padrão de gamepad para funções do jogo. A entrada de gamepad oferece mapeamentos para:

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 digitais geram eventos pressionados, soltos e repetidos. Exemplo mostrando como detectar entrada para um botão digital (pressionado ou solto):
function on_input(self, action_id, action)
if action_id == hash("gamepad_lpad_left") then
if action.pressed then
-- começar a mover para a esquerda
elseif action.released then
-- parar de mover para a esquerda
end
end
end
Sticks analógicos geram eventos de entrada contínuos quando o stick é movido para fora da zona morta definida no arquivo de configurações de gamepad (veja abaixo). Exemplo mostrando como detectar entrada para um stick analógico:
function on_input(self, action_id, action)
if action_id == hash("gamepad_lstick_down") then
-- o stick esquerdo foi movido para baixo
print(action.value) -- um valor entre 0.0 e -1.0
end
end
Sticks analógicos também geram eventos pressionados e soltos quando movidos nas direções cardeais acima de um certo valor limite. Isso facilita usar também um stick analógico como entrada direcional digital:
function on_input(self, action_id, action)
if action_id == hash("gamepad_lstick_down") and action.pressed then
-- o stick esquerdo foi movido até a posição extrema inferior
end
end
O Defold oferece suporte a vários gamepads por meio do sistema operacional host; ações definem o campo gamepad da tabela de ação para o número do gamepad de onde a entrada se originou:
function on_input(self, action_id, action)
if action_id == hash("gamepad_start") then
if action.gamepad == 0 then
-- gamepad 0 quer entrar no jogo
end
end
end
Mapeamentos de entrada de gamepad também fornecem dois mapeamentos separados chamados Connected e Disconnected para detectar quando um gamepad é conectado (mesmo os conectados desde o início) ou desconectado.
function on_input(self, action_id, action)
if action_id == hash("gamepad_connected") then
if action.gamepad == 0 then
-- gamepad 0 foi conectado
end
elseif action_id == hash("gamepad_disconnected") then
if action.gamepad == 0 then
-- gamepad 0 foi desconectado
end
end
end
(Desde o Defold 1.2.183)
Mapeamentos de entrada de gamepad também fornecem um mapeamento separado chamado Raw para disponibilizar a entrada não filtrada (sem deadzone aplicada) de botões, eixos e hats de qualquer gamepad conectado.
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
A configuração de entrada de gamepad usa um arquivo de mapeamento separado para cada tipo de gamepad de hardware. Mapeamentos de gamepad para hardwares específicos são definidos em um arquivo gamepads. O Defold vem com um arquivo gamepads integrado com configurações para gamepads comuns:

Se você precisar criar um novo arquivo de configurações de gamepad, temos uma ferramenta simples para ajudar:
Ela inclui binários para Windows, Linux e macOS. Execute-a pela linha de comando:
./gdc
A ferramenta pedirá que você pressione diferentes botões no controle conectado. Ela então produzirá um novo arquivo gamepads com os mapeamentos corretos para o seu controle. Salve o novo arquivo, ou mescle-o ao seu arquivo gamepads existente, e depois atualize a configuração em game.project:

(Desde o Defold 1.2.186)
Quando um gamepad é conectado e não existe mapeamento para ele, o gamepad gerará apenas ações “connected”, “disconnected” e “raw”. Nesse caso, você precisa mapear manualmente os dados brutos do gamepad para ações no seu jogo.
(Desde o Defold 1.4.8)
É possível verificar se uma ação de entrada de um gamepad vem de um gamepad desconhecido ou não lendo o valor gamepad_unknown da ação:
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
Gamepads têm suporte em builds HTML5 e geram os mesmos eventos de entrada que em outras plataformas. O suporte a gamepads é baseado na Gamepad API, que é compatível com a maioria dos navegadores (consulte esta tabela de suporte). Se o navegador não oferecer suporte à Gamepad API, o Defold ignorará silenciosamente quaisquer Gamepad triggers no seu projeto. Você pode verificar se o navegador oferece suporte à Gamepad API conferindo se a função getGamepads existe no objeto 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 o seu jogo estiver sendo executado dentro de um iframe, você também deve garantir que o iframe tenha a permissão gamepad adicionada:
<iframe allow="gamepad"></iframe>
(Desde o Defold 1.4.1)
Se um gamepad conectado for identificado pelo navegador como um gamepad padrão, ele usará o mapeamento de “Standard Gamepad” no arquivo de configurações de gamepads (um mapeamento de Standard Gamepad está incluído no arquivo default.gamepads em /builtins). Um gamepad padrão é definido como tendo 16 botões e 2 sticks analógicos com um layout de botões semelhante ao de um controle PlayStation ou Xbox (veja a definição e o layout de botões do W3C para mais informações). Se o gamepad conectado não for identificado como um gamepad padrão, o Defold procurará um mapeamento que corresponda ao tipo de hardware do gamepad no arquivo de configurações de gamepad.
No Windows, atualmente apenas controles Xbox 360 têm suporte. Para conectar seu controle 360 à sua máquina Windows, certifique-se de que ele esteja configurado corretamente.
(Desde o Defold 1.2.183)
Gamepads têm suporte em builds Android e geram os mesmos eventos de entrada que em outras plataformas. O suporte a gamepads é baseado no sistema de entrada do Android para eventos de tecla e movimento. Os eventos de entrada do Android serão traduzidos para eventos de gamepad do Defold usando o mesmo arquivo gamepad descrito acima.
Ao adicionar mapeamentos de gamepad adicionais no Android, você pode usar as seguintes tabelas de consulta para traduzir dos eventos de entrada do Android para valores do arquivo gamepad:
| Evento de tecla para índice de botão | Índice | Versão |
|---|---|---|
AKEYCODE_BUTTON_A |
0 | 1.2.183 |
AKEYCODE_BUTTON_B |
1 | 1.2.183 |
AKEYCODE_BUTTON_C |
2 | 1.2.183 |
AKEYCODE_BUTTON_X |
3 | 1.2.183 |
AKEYCODE_BUTTON_L1 |
4 | 1.2.183 |
AKEYCODE_BUTTON_R1 |
5 | 1.2.183 |
AKEYCODE_BUTTON_Y |
6 | 1.2.183 |
AKEYCODE_BUTTON_Z |
7 | 1.2.183 |
AKEYCODE_BUTTON_L2 |
8 | 1.2.183 |
AKEYCODE_BUTTON_R2 |
9 | 1.2.183 |
AKEYCODE_DPAD_CENTER |
10 | 1.2.183 |
AKEYCODE_DPAD_DOWN |
11 | 1.2.183 |
AKEYCODE_DPAD_LEFT |
12 | 1.2.183 |
AKEYCODE_DPAD_RIGHT |
13 | 1.2.183 |
AKEYCODE_DPAD_UP |
14 | 1.2.183 |
AKEYCODE_BUTTON_START |
15 | 1.2.183 |
AKEYCODE_BUTTON_SELECT |
16 | 1.2.183 |
AKEYCODE_BUTTON_THUMBL |
17 | 1.2.183 |
AKEYCODE_BUTTON_THUMBR |
18 | 1.2.183 |
AKEYCODE_BUTTON_MODE |
19 | 1.2.183 |
AKEYCODE_BUTTON_1 |
20 | 1.2.186 |
AKEYCODE_BUTTON_2 |
21 | 1.2.186 |
AKEYCODE_BUTTON_3 |
22 | 1.2.186 |
AKEYCODE_BUTTON_4 |
23 | 1.2.186 |
AKEYCODE_BUTTON_5 |
24 | 1.2.186 |
AKEYCODE_BUTTON_6 |
25 | 1.2.186 |
AKEYCODE_BUTTON_7 |
26 | 1.2.186 |
AKEYCODE_BUTTON_8 |
27 | 1.2.186 |
AKEYCODE_BUTTON_9 |
28 | 1.2.186 |
AKEYCODE_BUTTON_10 |
29 | 1.2.186 |
AKEYCODE_BUTTON_11 |
30 | 1.2.186 |
AKEYCODE_BUTTON_12 |
31 | 1.2.186 |
AKEYCODE_BUTTON_13 |
32 | 1.2.186 |
AKEYCODE_BUTTON_14 |
33 | 1.2.186 |
AKEYCODE_BUTTON_15 |
34 | 1.2.186 |
AKEYCODE_BUTTON_16 |
35 | 1.2.186 |
(definições de KeyEvent do Android)
| Evento de movimento para índice de eixo | Índice |
|---|---|
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 |
(definições de MotionEvent do Android)
Use esta tabela de consulta em combinação com um app de teste de gamepad da Google Play Store para descobrir para qual evento de tecla cada botão do seu gamepad está mapeado.