Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





La frustacion se viste de subindiuce fuera del intervalo

Iniciado por dask, 25 de Marzo de 2007, 11:57:55 PM

« anterior - próximo »

dask

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

kaeris

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...

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

dask

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 ;)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.