2012-04-29 11 views
10

Sólo estoy pensando en la posibilidad de Erlang de servidor de juegos. (oh, yo no soy un experto en Erlang, solo estoy considerando el escenario). Esto significa usar Actor Modelo para simulación de juegos. Por supuesto, la mayor atracción es su concurrencia distribuida en múltiples nodos.modelo de actor y detección de colisiones

Mi gran pregunta actual es cómo debería realizar interacciones entre múltiples actores, como la detección de colisiones. (esto es solo un ejemplo)

Aunque la detección de colisiones es esencial en cualquier juego, pero en la naturaleza de Actor Model, no parece eficiente e incluso no tiene sentido, porque necesita una consulta de estado sincronizada globalmente y actualizar a todos los actores de orientación. Y si uso cualquiera de sincronización, anula todos los beneficios del modelo de actor de Erlang.

Por supuesto dirigidas a agentes a la vez puede ser menor si uso el espacio de partición correctamente, pero es sólo una optimización, no una respuesta directora. ¿O es esta una respuesta correcta para esta pregunta? ¿Disminuye el rango de sincronización al disminuir el número de actores que interactúan?

Respuesta

9

Dividir el mapa en partes más pequeñas y que cada parte sea su propio proceso (incluso se puede dividir tanto que cada baldosa es su propio proceso). Un jugador que intenta moverse enviará un mensaje a la ficha/sub-mapa diciendo que va allí, y la ficha responderá si está bien o no. Esto evita colisiones ya que solo un mensaje es manejado por el mosaico/submapa a la vez. Múltiples submapas/mosaicos pueden manejar mensajes al mismo tiempo, por lo que sigue siendo un programa concurrente.

+0

La disminución del rango de interacción parece el único camino a seguir. Gracias. – Eonil

7

que tienen un juego basado en el espacio haciendo el servidor en Erlang. El truco es que cada ubicación/nodo/etc. también es un actor. Ejecuta la física de forma continua y envía la información a cada actor de entidad de juego de forma regular.

La cosa entera se convierte en mucho más limpio cuando empiezas a pensar de manera más abstracta de lo que un actor/la entidad. Por ejemplo, las colisiones pueden ser actores de pleno derecho. Esto hace que el lado del cliente sea mucho más fácil: ate los efectos gráficos y de sonido a la colisión. En el lado del servidor, también lo es: evitar múltiples efectos de colisión entre dos entidades más de una vez en un momento dado.

+0

¿Entonces toda la física se hace en un solo actor? ¿Cómo hiciste la física? – Eonil

+2

Sí. Estoy usando Bullet para ejecutar la física. Los actores de la entidad rastrean su propio estado de juego, se disparan entre sí, deciden el movimiento, etc. Envían comandos a la ubicación, que ejecuta las simulaciones. La ubicación se ejecuta continuamente y envía "usted está aquí" a las entidades periódicamente y "colisionó con X". Las entidades envían consultas a la ubicación también. – Nialscorva

Cuestiones relacionadas