una teatro teatral redaccion obra libreto inicio guion formato estructura empieza ejemplo dramatica dialogos como actuacion events haskell callback event-handling scenegraph

events - teatro - Agregar interacción a un gráfico de escena(en Haskell)



libreto de actuacion (1)

He creado un motor de renderizado funcional de gráficos de escenas en Haskell y me pregunto cómo agregar interacción a la mezcla.

Al principio, pensé que podría tener otro nodo Handler que tome uno de los otros nodos y luego aplicarle algunos IORefs. Por ejemplo, si tuviera

x,y,z <- IORef 0 KeyboardHandler KeyboardCallBack $ Translate x y z $ Object

Al atravesar, tendría

KeyboardHandler keyboard drawable -> case drawable of Translate x y z _ -> do (Char ''q'') -> x $~! (-1) (Char ''w'') -> x $~! (+1) (Char ''a'') -> y $~! (-1) (Char ''s'') -> y $~! (+1) (Char ''z'') -> z $~! (-1) (Char ''x'') -> z $~! (+1) render drawable

¿Es posible hacer algo así o voy completamente mal?


Ese enfoque podría funcionar, pero hay mejores maneras. Me gustó especialmente el ejemplo GLFW-b que utilizó algo llamado TQueue .

TQueue es la abreviatura de Cola transaccional; es algo que puede pasar eventos desde el hilo de renderizado, y luego leerlos desde el hilo de dibujo. De esta forma, puede procesarlos como si fueran un valor simple y puro; una lista de eventos.

En general, Haskell favorece la operación pura a estado mutable. Los marcos de representación disponibles enfatizan la transformación pura del estado lógico a material en la pantalla. Sin embargo, en este caso, algo así como una mónada State OSG probablemente estaría bien.