> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-es/scenes-sdk7/interactividad/eventos-de-button/advanced-button-events.md).

# Eventos avanzados de Button

Aprende cómo manejar los clics de los usuarios en tu escena.

Si necesitas que la interacción en tu escena siga una lógica personalizada que no sea compatible con los [Registrar callback](/creator/content-creator-es/scenes-sdk7/interactividad/eventos-de-button/register-callback.md) o [Basados en System](/creator/content-creator-es/scenes-sdk7/interactividad/eventos-de-button/system-based-events.md) enfoques, puedes trabajar directamente con los datos brutos del evento de entrada. Este enfoque es el más difícil, pero el más flexible.

## El componente PointerEventsResult

Cuando el engine detecta un pointer event, a la entidad en la que se hizo clic se le asigna un `PointerEventsResult` componente. Este componente contiene todos los datos brutos sobre el evento de impacto y almacena datos históricos sobre eventos anteriores.

Las funciones auxiliares en `inputSystem`, como `inputSystem.isTriggered` o `inputSystem.getInputCommand` son buenas para la mayoría de los escenarios simples, pero si necesitas obtener más detalles sobre el evento de impacto, consulta los datos brutos en el `PointerEventsResult`.

El `PointerEventsResult` componente contiene una lista de eventos de puntero, con un objeto por cada evento. Almacena una lista de hasta 100 eventos; los eventos más recientes se guardan al final de la lista. Una vez que la lista alcanza una longitud de 100, empieza a descartar los eventos antiguos a medida que llegan los nuevos.

Cada evento de la lista tiene los siguientes datos:

* `analog`: Número opcional, presente solo en eventos de una entrada analógica (como un joystick), que almacena el valor analógico de la entrada.
* `botón`: Qué id de botón se pulsó. El número corresponde al `InputAction` enum, que enumera todos los botones disponibles.
* `state`: Tipo de evento de puntero, del enum `PointerEventType`. *0* se refiere a `PointerEventType.PET_UP`, *1* en `PointerEventType.PET_DOWN`, *2* en `PointerEventType.PET_HOVER_ENTER`, *3* en `PointerEventType.PET_HOVER_LEAVE`, *4* en `PointerEventType.PET_PROXIMITY_ENTER`, *5* en `PointerEventType.PET_PROXIMITY_LEAVE`
* `marca de tiempo`: Un [marca de tiempo de Lamport](https://en.wikipedia.org/wiki/Lamport_timestamp) para identificar cada evento de botón.

  > Nota: Esta marca de tiempo no está numerada en función de la hora actual. Piénsalo como un contador que empieza en 0 y se incrementa en 1 por cada evento.
* `impacto`: Un objeto que contiene los siguientes datos sobre el evento de impacto:
  * `entityId`: Número de Id de la Entity que fue impactada por el rayo.
  * `meshName`: *String* con el nombre interno de la malla específica del modelo 3D que fue impactada. Esto es útil cuando un modelo 3D está compuesto por múltiples mallas.
  * `globalOrigin`: *Vector3* para la posición donde se origina el rayo (relativa a la escena)
  * `dirección`: *Vector3* con el vector de dirección del rayo, en coordenadas globales
  * `posición`: *Vector3* para la posición donde el rayo intersectó con la Entity impactada (relativa a la escena)
  * `length`: Longitud del rayo desde su origen hasta la posición donde ocurrió el impacto contra la Entity.
  * `normalHit`: *Vector3* con un vector de dirección normalizado, que describe el ángulo de la normal del impacto en el espacio mundial.

```ts
import { engine, PointerEventsResult } from '@dcl/sdk/ecs'

function PointerReadingSystem() {
  for (const [entity] of engine.getEntitiesWith(PointerEventsResult)) {
    const events = PointerEventsResult.get(entity)
    for (const event of events) {
      console.log('POINTER EVENT DATA:', event)
    }
  }
}

engine.addSystem(PointerReadingSystem)
```

## Seguir los movimientos del jugador

En juegos multijugador en tiempo real donde la sincronización de los movimientos del jugador es crítica, es posible que quieras hacer un seguimiento de la posición de cada jugador usando un servidor de terceros como fuente de verdad. Puedes mejorar el tiempo de respuesta escuchando el botón con antelación y predecir sus efectos en tu servidor antes de que el avatar haya cambiado de posición.

Este enfoque ayuda a compensar los retrasos de red, pero sin duda dará lugar a discrepancias, así que también deberías consultar periódicamente la posición actual del jugador para hacer correcciones. Equilibrar estas predicciones y correcciones puede requerir bastante ajuste fino.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/creator/content-creator-es/scenes-sdk7/interactividad/eventos-de-button/advanced-button-events.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
