• Miércoles 20 de Noviembre de 2024, 18:47

Autor Tema:  Rendear Texto  (Leído 3815 veces)

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Rendear Texto
« en: Viernes 17 de Febrero de 2006, 00:02 »
0
Tengo un problema al rendear texto combinado con sprites(usando las clases 2D incluidas en el Direct3D)

Ej:

1.- Render Sprite1 //Fondo tamaño pantalla 800x600
2.- Render Sprite2 //Imagen simitransparente
3.- Render Texto   //encima de los dos anteriores

En ese orden y solo se ven los Sprites no el texto.

desconecto el Sprite1(Fondo) aparece el texto debajo del Sprite2 que como es translucido se alcaza a ver (algo tenue) el texto.

Al parecer el texto se imprime primero (pese aque le doy la orden al ultimo)que los sprites

Código: Text
  1. font.DrawText(null,text,new Rectangle(screenX,screenY,200,100),
  2.                  DrawTextFormat.WordBreak,
  3.                  color);
  4.  
Como ven en el codigo uso la clasica funcion para rendear Texto

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Rendear Texto
« Respuesta #1 en: Viernes 17 de Febrero de 2006, 02:54 »
0
Ya di con la solucion :comp:  :comp:

Neko-sama

  • Miembro activo
  • **
  • Mensajes: 99
    • Ver Perfil
Re: Rendear Texto
« Respuesta #2 en: Viernes 17 de Febrero de 2006, 04:52 »
0
y cual era?

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Rendear Texto
« Respuesta #3 en: Viernes 17 de Febrero de 2006, 15:48 »
0
Código: Text
  1.      private void InitRender()
  2.     {    
  3.       device.Clear(ClearFlags.Target,System.Drawing.Color.Black,1.0f,0);
  4.       device.BeginScene();      
  5.       sprites.Begin(SpriteFlags.AlphaBlend);
  6.     }
  7.  
  8.     private void EndRender()
  9.     {              
  10.       sprites.Flush();
  11.       sprites.End();    
  12.       device.EndScene();
  13.       device.Present();            
  14.     }
  15.  
  16.  

Entre esto dos metodos Rendeo todas las imagenes,como ven al final del del primer metodo hay un sprites.Begin(bla..,bla..); que inicia el render de los Sprites (que al parecer tomo todo el control del hardware de video y solo puedo colocar Sprites).La solucion es que tuve que hacer un sprites.End(); anticipado (fuera del metodo private void EndRender()) luego dibujo el Texto y entonces llamo a EndRender.

Neko-sama

  • Miembro activo
  • **
  • Mensajes: 99
    • Ver Perfil
Re: Rendear Texto
« Respuesta #4 en: Lunes 20 de Febrero de 2006, 05:37 »
0
creo que lo que hace el sprites.End() es hacer un sprites.Flush()...

yo tube un problema con algo parecido...

en mi juego... los personajes se mueven en el eje Y y pueden estar delante o detras de otro al moverse arriba o abajo...  no me funcionaba bien hasta que hice un flush por cada render pintado... (despues de llamar al metodo Draw)

y asi se solucionó....

supongo que puede ayudarte lo mismo y no tendras problemas despues con el orden de pintado de tus renders

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Rendear Texto
« Respuesta #5 en: Lunes 20 de Febrero de 2006, 16:16 »
0
Mmmm!.Siguendo tu consejo estuve leyendo unos libros de DX9 para C# que importe de USA, Sprite.Flush(),lo que hace  es vaciar la memoria secundaria donde previamente fueron colocados los sprites a la memoria primaria(pantalla) a difencia de Sprite.End() que hace lo mismo pero ademas cierra todo el manejo de esprites.
Asi que utilice Sprite.Flush() luego coloco el texto y puedo seguir trabajando con nuevos
sprites y al final cierro todo.

Citar
(despues de llamar al metodo Draw)

Del metodo Draw()  ya hay que irse olvidando y pasarse al Draw2D() que biene en en espacio de nombres DirectX.Direct3D.Lo malo con lo que me he topado es que ahora
no puedes escalar tus sprite a un tamaño que quieras,solo a factores de escala previamente establecidos.

Neko-sama

  • Miembro activo
  • **
  • Mensajes: 99
    • Ver Perfil
Re: Rendear Texto
« Respuesta #6 en: Martes 21 de Febrero de 2006, 13:16 »
0
yo programo en Visual C++...

aunque no tiene nada que ver el lenguaje...

yo uso la interfaz LPD3DXSPRITE que solo tiene el metodo Draw y es la forma de pintar sprites con Microsoft Direct3D que se obtiene cuando usas la funcion  D3DXCreateSprite y todo está en la librería D3dx9.lib

mira...
yo uso todo eso y funciona muy bien...
no me ah dado problemas...

dime si usas lo mismo o otra cosa mejor para actualizarme si es necesario  :hola:

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Rendear Texto
« Respuesta #7 en: Martes 21 de Febrero de 2006, 16:32 »
0
Tengo el SDK de Octubre 2005 y la documentacion dice que a futuro le quita el soporte a DirectDraw o sea se quedo como esta y no haran mejoras en esa libreria y lo sacaran de los futuros SDKs .El SDK octubre 2005 aun trae el DirectDraw para C# no se si para C++,la forma en tu lo haces es en el fondo con Direct3D (pense que era el metodo Draw de DirectDraw), por lo que no creo que tengas problemas a futuro.Todos estos cambios los hacen a nivel del SDK pero no sobre la version End_User para que los juegos antiguos  sigan corriendo.

Algo de Historia.

DirectDraw fue el primer componente Direct escrito por Team de la epoca (El SDK Game)y la demostracion de una animacion llamada Budsy se utiliso para vender el proyecto completo a los ejecutivos de microsoft. DirectDraw fue por mucho tiempo la piedra angular de DirectX y otros componentes como Direct3D se basan el.

Pero como el tiempo pasa para todos y todo, me dicen que SDK diciembre 2005 ya no trae DirectDraw.