XNA GUI: Creando un widget 'scroll panel'

Intento crear un sistema de GUI simple y actualmente estoy atascado en cómo implementar un área de text con una barra de desplazamiento. En otras palabras, el text es demasiado grande para caber en el área de visualización. Quiero aprender a hacer esto, así que preferiría no usar una API ya rodada.

Creo que esto podría hacerse si el text fuera parte de una textura, pero si el juego tiene un dialog único, esto parece caro.

Investigué creando una textura sobre la marcha y escribiéndola, pero no se me ocurrió nada.

Cualquier estrategia sugerida sería apreciada. Creo que todo se networkinguce a: text en una textura y ¿cómo? O algo en lo que no he pensado …

Básicamente tienes dos problemas para resolver aquí.

En primer lugar, debe compensar el text , de modo que se mueva según el lugar donde se mueve la barra de desplazamiento. Puede hacerlo pasando una matriz de transformación a SpriteBatch.Begin , o simplemente agregando y desplazando a la position cuando llame a SpriteBatch.Draw .

Por lo general, se prefiere usar una matriz, ya que no tiene que pasar correctamente el desplazamiento en varios lugares.

El segundo problema a resolver es recortar el text , de modo que no se dibuje fuera del cuadro en el que desea dibujarlo. Puede lograrlo configurando una window gráfica o un rectángulo de tijera.

Una window GraphicsDevice.Viewport implica configurar GraphicsDevice.Viewport (y configurarlo cuando haya terminado). Esto afecta las coorderadas del dibujo: SpriteBatch , por ejemplo, pone (0,0) en la parte superior izquierda de la window gráfica.

Establecer un rectángulo de tijera requiere configurar el GraphicsDevice.ScissorRectangle y crear y usar un RasterizerState que tenga ScissorTestEnable = true . No afecta las coorderadas, simplemente clips.

(Renderizar text a un objective de renderizado y dibujo que funcionaría, pero es complicado y relativamente lento).