Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Trabajar con el sistema de bus de eventos (EBus)
Los buses de eventos (EBuses) son un sistema de comunicación de propósito general que Lumberyard utiliza para enviar notificaciones y recibir solicitudes. Los EBuses son configurables y admiten muchos casos de uso diferentes.
Para interactuar con el motor u otros componentes en Lumberyard, incluye el componente o El encabezado EBus o API del sistema en el código. A continuación, realice llamadas a los EBuses expuestos. Con esto puede reemplazar el motor–nivele las API del sistema con implementaciones que defina en una gema. Por ejemplo, podría sustituir Lumberyarddel sistema de audio de con su propio controlador de EBus. Esto le daría un control completo sobre el audio sin tener que volver a compilar el del motor.
Para ver ejemplos de uso de EBus, consulte Uso y ejemplos.
Para obtener información detallada sobre EBuses, incluidos diagramas conceptuales, consulte Buses de eventos en profundidad.
Para obtener documentación de referencia de la API de C++ sobre el código EBus principal, consulte la Referencia de la API de EBus en el Referencia de la API de C++ de Amazon Lumberyard.
Cómo utilizan los componentes Buses electrónicos
Los componentes suelen utilizar EBuses de dos formas: para enviar eventos o para gestionar
solicitudes.
Un bus que envía eventos es un notification
del autobús. Un bus que recibe
es una request
del autobús. Algunos componentes proporcionan un tipo de bus, y
algunos componentes proporcionan ambos tipos. Algunos componentes no proporcionan
un EBus en absoluto. Usted
utilice la clase EBus para ambos tipos de EBus, pero configure los EBuses de forma
diferente. El
las siguientes secciones muestran cómo configurar y configurar buses de notificación,
controladores de eventos,
y solicitar autobuses.
Notificación Autobuses
Los buses de notificación envían eventos. Los controladores reciben los eventos, lo que implemente una función para gestionar el evento. Los controladores se conectan primero al bus. Cuando el El bus de envía un evento , la función del controlador ejecuta. Esta sección muestra cómo establecer un bus de notificación para enviar un evento y un controlador para recibir el evento.
Configuración de un Bus de notificación
Para configurar un bus para enviar eventos
-
Definir una clase que herede de
EBusTraits
. Esta clase será la interfaz para Bus electrónico. -
Anular individual
EBusTraits
las propiedades para definir el del bus. TresEBusTraits
que los buses de notificación suelen anularseAddressPolicy
, que define cuántos direcciones que contiene el EBus,HandlerPolicy
, que describe cómo muchos controladores pueden conectarse a cada dirección, yBusIdType
, que es el tipo de ID que se utiliza para dirigir el EBus si se utilizan direcciones. Por ejemplo, los buses de notificación a menudo necesitan tener varias direcciones, con las direcciones identificadas por el ID de entidad. Para ello, anulan el valor predeterminadoAddressPolicy
conEBusAddressPolicy::ById
y establece elBusIdType
deEntityId
. -
Declare una función para cada evento que el EBus enviará. Controlador Las clases de implementarán estas funciones para gestionar los eventos de.
-
Declare un EBus que tome su clase como parámetro de plantilla.
-
Enviar eventos. La función que se utiliza para enviar el evento depende de direcciones a las que desea enviar el evento, si desea devolver un valor, el orden en el que llamar a los controladores y si se debe poner en cola el evento.
-
Para enviar un evento a todos los controladores conectados al EBus, utilice
Broadcast()
. Si un EBus tiene varias direcciones, puedes utilizarEvent()
para enviar el evento solamente a los controladores conectados con el ID especificado. Para aplicaciones de rendimiento código, puedes evitar una búsqueda de direcciones utilizandoEvent()
variantes que toman un puntero en lugar de un ID. -
Si un evento devuelve un valor, utilice
BroadcastResult()
o bienEventResult()
para obtener del resultado. -
Si desea que los controladores reciban los eventos en orden inverso, utilice
BroadcastReverse()
o bienEventReverse()
. -
Para enviar eventos de forma asíncrona, ponga en cola el evento. Los eventos en cola son no se ejecuta hasta que la cola se vacía. Para admitir la puesta en cola, establezca la opción
EnableEventQueue
característica. Para poner en cola eventos, usarQueueBroadcast()
o bienQueueEvent()
. Para vaciar la cola de eventos, utiliceExecuteQueuedEvents()
.
-
Configuración de un controlador
Para habilitar una clase de controlador para gestionar los eventos enviados por una notificación autobús
-
Obtener la clase de controlador de
. Por ejemplo, una clase que necesita gestionar solicitudes de ciclos debe derivarse de<BusName>
::HandlerTickRequestBus::Handler
. -
Implementar la interfaz de EBus para definir cómo debe gestionar la clase de controlador los eventos. En el ejemplo de bus de ciclos, una clase de controlador implementaría
OnTick()
. -
Conéctese y desconecte del autobús en los lugares apropiados dentro de su del código de la clase de controlador. Uso
para conectarse al bus y<BusName>
:Handler::BusConnect()
para desconectarse del bus. Si la clase de controlador es un componente, conéctese a el bus en<BusName>
:Handler::BusDisconnect()Activate()
y desconectar del bus enDeactivate()
. Los no componentes normalmente se conectan en el constructor y desconecte en el destructor.
[EMPTY] Autobuses
Un bus de solicitud recibe y gestiona las solicitudes. Normalmente, solo una clase gestiona para un bus de solicitud.
Configuración de una solicitud [EMPTY]
Los primeros pasos para configurar un bus de solicitud son similares a configurar un del bus de notificación. Después de eso, también tendrá que implementar los controladores para gestionar las solicitudes.
Para configurar un bus de solicitud
-
Definir una clase que herede de
EBusTraits
. Esta clase será la interfaz de las solicitudes realizadas al EBus. -
Anular individual
EBusTraits
las propiedades para definir el del bus. DosEBusTraits
que solicitan autobuses suelen anularseAddressPolicy
, que define cuántos direcciones que contiene el EBus, yHandlerPolicy
, que describe cuántos controladores se pueden conectar a cada dirección. Por ejemplo, porque hay normalmente solo una clase de controlador para cada bus de solicitud, buses de solicitud normalmente anulan la política de controlador predeterminada conEBusHandlerPolicy::Single
. -
Declare una función para cada evento que recibirá la clase de controlador sobre. Estas son las funciones que otras clases utilizarán para de la clase de controlador.
-
Declare un EBus que tome su clase como parámetro de plantilla.
-
Implementar un controlador para los eventos tal y como se describe en la sección anterior Configuración de un controlador.