Perdon por el nombre pero tiendo a poner nombres asi XD
estoy haciendo un "motor" (de echo no es un verdadero motor, porque el 90% va a estar hard codeado) en VB6 y la libreria dx_lib32 2.1 de EX3 y mi primer objetivo es:
Un motor grafico que haga:
1- Tiene que mostrar un fondo con respecto a un mapa cargado en la memoria o en un archivo, con diferentes tiles guardados en un mismo archivo
2- Tiene que mostrar una rejilla arriba separando los tiles
3- Tiene que mostrar el tile seleccionado con un cuadrado
4- Tiene que mostrar un HUD con los FPS y las coordenadas X e Y
5- Tiene que aparecer un menu cuando se pulse el boton derecho del mouse, de tal manera que aparesca en el lugar, sin obstruir el tile y sin desaparecer fuera de la pantalla
ya tengo el punto 2 y 3 listo
pero tengo un problema con 1, 4
y un problema grave con 4
y 5 todavia no lo ago
Mi primer problema es el dibujo de graficos y texturas
Basicamente no se dibujan
el codigo que uso esta aca, todas las variables que uso estan definidas en un modulo, todas con su nombre y tipo correspondiente (ya lo revise como 7 veses), toda funcion se llama desde otro lado y toda la estructura funciona (tambien revisado)
Código:
Public Sub CargarGraficos()
'Inicializamos la clase grafica y cargamos el grafico de los pisos
Piso = M_gfx.MAP_Load(App.Path & "\Archivos\Pisos1.png", 0)
'cargamos el hud
Hud = M_gfx.MAP_Load(App.Path & "\Archivos\Hud.png", 0)
'cargamos el menu
Menu = M_gfx.MAP_Load(App.Path & "\Archivos\Menu1.png", 0)
End Sub
'Bucle Principal
Public Sub BucleRender()
frmMain.Show
Call M_gfx.Init(frmMain.hWnd, 800, 600, , True, , True, 60) 'abrimos la ventana
Do While Terminar <> True 'Bucle Principal Grafico
'dibujamos una rejilla arriba de todo
Call DibujarMapa
Call DibujarRejilla
Call DibujarMouse
'Call DibujarHud <============== DA ERROR!!!
Call M_gfx.Frame 'Mostramos
Loop
' se pudrio todo, rajemos
Call DescargarGraficos '
Call M_gfx.Terminate ' terminamos y eliminamos la clase
Set M_gfx = Nothing
End Sub
' Omito dibujarrejilla y dibujarmapa porque andan bien
Private Sub DibujarMapa() 'Dibujamos los pisos que quedan como fondo
Dim i As Byte, j As Byte
For j = 1 To 14
For i = 1 To 16
Call M_gfx.MAP_SetRegion(Piso, Pisos(0))
Call M_gfx.DRAW_Map(Piso, i * 50, j * 50, 0, 0, 0)
Next
Next
End Sub
Private Sub DibujarHud()
' Dibujamos el hud...
Call M_gfx.DRAW_Map(Hud, 0, 0, -7, 0, 0)
'...y lo que dice
Call M_gfx.DRAW_Text(Arial, CStr(M_gfx.FPS), 60, 10, -8, colBlanco, Align_Right)
Call M_gfx.DRAW_Text(Arial, "a", 30, 44, 0, colBlanco, Align_Right)
Call M_gfx.DRAW_Text(Arial, "b", 30, 72, 0, colBlanco, Align_Right)
End Sub
todo lo he revisado como 7 veses, tengo mas tiempo abierto los ejemplos y la ayuda de dx_lib32 que mi proyecto. Las lineas y los cuadrados se visualizan perfectamente, pero los graficos cargados en la memoria no. Llevo 2 dias sin encontrar el error por lo que grito por ayuda.
otro problema grave que e tenido es con
Call M_gfx.DRAW_Text(Arial, CStr(M_gfx.FPS), 60, 10, -8, colBlanco, Align_Right)
siendo "Arial"
Arial = M_gfx.FONT_LoadSystemFont("Arial", 12, False, False, False, False)
y colblanco
colBlanco = M_gfx.ARGB_Set(255, 255, 255, 255)
que son ejecutados en otra parte, antes del bucle grafico
cada ves que lo corro, me da un error de subindice fuera del intervalo, apesar de que he chequedo todo. e incluso cortado y pegado el ejemplo que viene con la libreria y todo... PERO EL ERROR PERSISTE!!!! y este no es como el otro que no muestra nada, este me impide correr el programa
dejo mi codigo en esta direccion(http://es.geocities.com/espgames/Motor.zip) por si alguien lo quiere bajar para verlo por mi error o para sacarle algo que "pueda" servirle (aunque no cuento con eso ;])
gracias por adelantado
posteado en adva tambien
Hola, estuve probando tu motor, y el error sobre la carga de pisos, es que no inicias la dx_gfx_class antes de cargarlos, por eso no los carga... puede que el error no sea ese y yo me este equivocando, pero probe cortando la linea de iniciacion apenas se abre el formulario, y funciono, tambien probe cargando los graficos antes de la renderizacion y despues de iniciado el dx_gfx_class y tambien funciono.
aplicando la forma que te dije tambien va a funcionar el Hud, (en tu motor lo pusiste como comentario, por eso por mas que hagas lo que te dije no te va a funcionar, nada mas te digo esto por si te olvidaste :D)
el dibujado de los fps y la posicion X e Y las pusiste con Align_Right por eso va a tomar como posicion 0 la esquina superior derecha 0...
Wenas.
Por lo que veo a simple vista (tal y como has expuesto el codigo) creo que kaeris esta en lo cierto. Realizas las cargas de texturas antes de inicializar la clase grafica. El metodo Init() de la clase no solo incializa el modo de video si no todo el subsistema interno de la clase (a excepcion de algunas funciones del espacio de nombres DEVICE_ que si estan operativas sin necesidad de inicializar la clase para listar informacion sobre el sistema grafico por ejemplo) por lo que error no te genera las funciones (aunque si te devuelve codigo de error GFX_FILENOTLOAD en vez de un ID de recurso) pero oviamente tampoco ejecutan la carga de la textura. Me supongo que lo mismo con el problema de la fuente de texto.
Salu2...
T.T Frustacion
me havia fijado como (amo ese numero) 7 veses si lo inicializaba, y de ehco lo llamo antes de que se inice el bucle principal (Call M_gfx.Init(frmMain.hWnd, 800, 600, , True, , True, 60) 'abrimos la ventana)
pero nio me di cuenta de que "cargaba" las imagenes ANTES de inicializar la clase...
Private Sub Form_Load()
Call SetearVariables
Call CargarGraficos 'AQUI Cargo los graficos
Call IniciarInput
Call BucleRender 'AQUI Inicio la clase
End Sub
devuelta un error totalmente evitable, bueno del error se aprende, supongo. si sigo asi en un año me aprendo 3 idiomas y saco cuatro titulos de los errores que hago ;)
EDIT: apropo... grax ;)