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
Se recomienda que te familiarices con la forma general en que funciona el input en Defold, cómo recibir input y en qué orden se recibe en tus archivos script. Aprende más sobre el sistema de input en el manual de visión general del input.
Los triggers de mouse permiten vincular input de los botones del mouse y de las ruedas de desplazamiento a acciones del juego.

Los inputs de botones del mouse MOUSE_BUTTON_LEFT, MOUSE_BUTTON_RIGHT y MOUSE_BUTTON_MIDDLE son equivalentes a MOUSE_BUTTON_1, MOUSE_BUTTON_2 y MOUSE_BUTTON_3.
Los ejemplos siguientes usan las acciones mostradas en la imagen anterior. Como con todo input, puedes nombrar tus acciones de input como quieras.
Los botones del mouse generan eventos pressed, released y repeated. Ejemplo que muestra cómo detectar input para el botón izquierdo del mouse (ya sea presionado o soltado):
function on_input(self, action_id, action)
if action_id == hash("mouse_button_left") then
if action.pressed then
-- botón izquierdo del mouse presionado
elseif action.released then
-- botón izquierdo del mouse soltado
end
end
end
Las acciones de input MOUSE_BUTTON_LEFT (o MOUSE_BUTTON_1) también se envían para input de tipo Single-touch.
El input de la rueda del mouse detecta acciones de desplazamiento. El campo action.value es 1 si la rueda se desplaza y 0 en caso contrario. (Las acciones de desplazamiento se tratan como si fueran pulsaciones de botón. Actualmente Defold no admite input de desplazamiento granular en paneles táctiles.)
function on_input(self, action_id, action)
if action_id == hash("mouse_wheel_up") then
if action.value == 1 then
-- la rueda del mouse se desplazó hacia arriba
end
end
end
El movimiento del mouse se maneja por separado. Los eventos de movimiento del mouse no se reciben a menos que se configure al menos un trigger de mouse en tus input bindings.
El movimiento del mouse no se vincula en los input bindings, sino que action_id se establece en nil y la tabla action se rellena con la ubicación y el delta de movimiento de la posición del mouse.
function on_input(self, action_id, action)
if action.x and action.y then
-- hacer que el objeto de juego siga el movimiento del mouse/touch
local pos = vmath.vector3(action.x, action.y, 0)
go.set_position(pos)
end
end
Los triggers de tipo Single-touch y Multi-touch están disponibles en dispositivos iOS y Android en aplicaciones nativas y en bundles HTML5.

Los triggers de tipo Single-touch no se configuran desde la sección Touch Triggers de los input bindings. En su lugar, los triggers Single-touch se configuran automáticamente cuando tienes input de botón del mouse configurado para MOUSE_BUTTON_LEFT o MOUSE_BUTTON_1.
Los triggers de tipo Multi-touch rellenan una tabla en la tabla de acción llamada touch. Los elementos de la tabla tienen índices enteros con números 1–N, donde N es el número de puntos táctiles. Cada elemento de la tabla contiene campos con datos de input:
function on_input(self, action_id, action)
if action_id == hash("touch_multi") then
-- Crear una instancia en cada punto táctil
for i, touchdata in ipairs(action.touch) do
local pos = vmath.vector3(touchdata.x, touchdata.y, 0)
factory.create("#factory", pos)
end
end
end
A Multi-touch no debe asignársele la misma acción que al input de botón del mouse para MOUSE_BUTTON_LEFT o MOUSE_BUTTON_1. Asignar la misma acción sobrescribirá en la práctica Single-touch e impedirá que recibas eventos Single-touch.
El asset Defold-Input puede usarse para configurar fácilmente controles virtuales en pantalla, como botones y sticks analógicos, con soporte para multi touch.
Detectar cuándo el usuario ha hecho click o ha tocado un componente visual es una operación muy común que se necesita en muchos juegos. Puede ser la interacción del usuario con un botón u otro elemento de interfaz, o la interacción con un objeto de juego, como una unidad controlada por el jugador en un juego de estrategia, un tesoro en un nivel de un dungeon crawler o un personaje que entrega misiones en un RPG. El enfoque a usar varía según el tipo de componente visual.
Para los elementos de interfaz existe la función gui.pick_node(node, x, y), que devolverá true o false según si la coordenada especificada está dentro de los límites de un nodo GUI. Consulta la documentación de la API, el ejemplo de pointer over o el ejemplo de botón para aprender más.
Para los objetos de juego es más complicado detectar la interacción, ya que elementos como la traslación de la cámara y la proyección del script de render afectan los cálculos requeridos. Hay dos enfoques generales para detectar interacción con objetos de juego:
Una solución lista para usar que utiliza objetos de colisión para detectar input del usuario con soporte para arrastrar y hacer click se puede encontrar en el asset Defold-Input.
En ambos casos es necesario convertir entre las coordenadas de espacio de pantalla del evento de mouse o touch y las coordenadas de espacio del mundo de los objetos de juego. Esto se puede hacer de un par de formas distintas: