Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





PAK_ExtractFileInMemory Y MAP_LoadFromMemory

Iniciado por kaeris, 27 de Marzo de 2007, 05:49:45 PM

« anterior - próximo »

kaeris

Hola, estuve intentando que el PAK me lo extraiga en memoria... y despues teniendo el vector con la informacion del archivo que de la memoria me lo cargue a la variable long... pero no funca :S:S dejo el codigo:

Private System As dx_System_Class
Private Engine As dx_GFX_Class

Private Path As String
Private Imagen As Long

Private Lista() As PAK_FileInfo
Private Files() As Byte

Dim continuar As Boolean



Private Sub Command1_Click()
continuar = False
End Sub

Private Sub Form_Load()
Me.Show

Set Engine = New dx_GFX_Class
Set System = New dx_System_Class

Call Engine.Init(Me.hWnd, 800, 600, 0, True)

Path = "C:\Documents and Settings\Federico\Escritorio\Ejemp\graficos.pak"

Call System.PAK_Load(Path, Lista())

Call System.PAK_ExtractFileInMemory(Path, Lista(1), Files())

Imagen = Engine.MAP_LoadFromMemory(Files(), 0)


continuar = True

Do While continuar
   Call Engine.DRAW_Map(Imagen, 300, 300, 0, 200, 200)

   Engine.Frame
Loop

End

End Sub


puse apra q imprima en pantalla el grafico uno, q existe en el pak pero nose q pasa :S



EDIT: Estuve probando el cargar el grafico del pak en la memoria pero no funciona, me manda el error GFX_FILENOTLOAD... puede ser que alla escrito mal el codigo??

[EX3]

En principio el codigo esta bien. Acabo de modificar el tutorial 2 de dx_GFX para que cargue una textura desde un PAK y me ha funcionado:

Option Explicit

'Variable objeto que apunta a la clase dx_GFX:
Dim m_gfx As dx_GFX_Class

'Declaramos e inicializamos la variable objeto que apunta a la clase dx_System:
Dim m_System As New dx_System_Class

'Alamcena el valor del grafico en memoria:
Dim Sprite As Long

'Controla el bucle principal:
Dim Looping As Boolean

Private Sub Form_Load()
   'Variables para cargar la textura en memoria:
   Dim buffer() As Byte, list() As PAK_FileInfo
   
   'Mostramos la ventana:
   Me.Show
   
   'Creamos la instancia de la clase dx_GFX:
   Set m_gfx = New dx_GFX_Class
   
   'Inicializamos la clase y el modo de video a 640x480 en modo ventana:
   Call m_gfx.Init(Me.hWnd, 640, 480, , True)
   
   'Cargamos la lista de archivos del paquete:
   Call m_System.PAK_Load(App.Path & "\textures.pak", list())

   'Cargamos en memoria el primer elemento de la lista:
   Call m_System.PAK_ExtractFileInMemory(App.Path & "\textures.pak", list(0), buffer())
   
   'Cargamos un grafico en memoria:
   Sprite = m_gfx.MAP_LoadFromMemory(buffer(), 0)
   
   Looping = True
   
   Do While Looping
       'Dibujamos el grafico en las coordenada 32x 32y con su tamaño original:
       Call m_gfx.DRAW_Map(Sprite, 32, 32, 0, 0, 0)
       
       'Ejecutamos las llamadas de la clase grafica:
       Call m_gfx.Frame
   
   Loop
   
   'Descargamos el grafico de la memoria:
   Call m_gfx.MAP_Unload(Sprite)
   
   'Terminamos la ejecucion de la clase:
   Call m_gfx.Terminate
   
   'Destruimos la instancia de la clase:
   Set m_gfx = Nothing
   Set m_System = Nothing
   
   End

End Sub

Private Sub Form_Unload(Cancel As Integer)
   Looping = False

End Sub

Aun asi te comento que ya me ha pasado a veces de que tampoco me ha funcionado la funcion MAP_LoadFromMemory() y sin causa aparente.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

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

kaeris

probando con tu codigo me funciono, y me di cuenta que nada mas me funciona cuando las imagenes son PNG

[EX3]

Cita de: "kaeris"probando con tu codigo me funciono, y me di cuenta que nada mas me funciona cuando las imagenes son PNG
Pues en teoria deberia funcionar con cualquier formato, aunque bueno, el PNG es el mejor formato para trabajar segun mi opinion:
- Mejor compresion que un JPG
- Sin perdida de calidad, como si trabajaras con un BMP
- Soporta de canal Alpha para transparencias, que resulta mucho mejor que usar colorkey y dx_lib32 lo soporta a la perfeccion.

A decir verdad, las veces que a mi me funciono fue tambien usando PNG's segun recuerdo. Lo anoto por si surge el problema a otras personas en futuras ocasiones.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

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

Pilton88

Cita de: "[EX3"]En principio el codigo esta bien. Acabo de modificar el tutorial 2 de dx_GFX para que cargue una textura desde un PAK y me ha funcionado:

Option Explicit

'Variable objeto que apunta a la clase dx_GFX:
Dim m_gfx As dx_GFX_Class

'Declaramos e inicializamos la variable objeto que apunta a la clase dx_System:
Dim m_System As New dx_System_Class

'Alamcena el valor del grafico en memoria:
Dim Sprite As Long

'Controla el bucle principal:
Dim Looping As Boolean

Private Sub Form_Load()
   'Variables para cargar la textura en memoria:
   Dim buffer() As Byte, list() As PAK_FileInfo
   
   'Mostramos la ventana:
   Me.Show
   
   'Creamos la instancia de la clase dx_GFX:
   Set m_gfx = New dx_GFX_Class
   
   'Inicializamos la clase y el modo de video a 640x480 en modo ventana:
   Call m_gfx.Init(Me.hWnd, 640, 480, , True)
   
   'Cargamos la lista de archivos del paquete:
   Call m_System.PAK_Load(App.Path & "\textures.pak", list())

   'Cargamos en memoria el primer elemento de la lista:
   Call m_System.PAK_ExtractFileInMemory(App.Path & "\textures.pak", list(0), buffer())
   
   'Cargamos un grafico en memoria:
   Sprite = m_gfx.MAP_LoadFromMemory(buffer(), 0)
   
   Looping = True
   
   Do While Looping
       'Dibujamos el grafico en las coordenada 32x 32y con su tamaño original:
       Call m_gfx.DRAW_Map(Sprite, 32, 32, 0, 0, 0)
       
       'Ejecutamos las llamadas de la clase grafica:
       Call m_gfx.Frame
   
   Loop
   
   'Descargamos el grafico de la memoria:
   Call m_gfx.MAP_Unload(Sprite)
   
   'Terminamos la ejecucion de la clase:
   Call m_gfx.Terminate
   
   'Destruimos la instancia de la clase:
   Set m_gfx = Nothing
   Set m_System = Nothing
   
   End

End Sub

Private Sub Form_Unload(Cancel As Integer)
   Looping = False

End Sub

Aun asi te comento que ya me ha pasado a veces de que tampoco me ha funcionado la funcion MAP_LoadFromMemory() y sin causa aparente.

Salu2...

Perdon por revivir post, pero aca hay algo que no me queda claro:

   'Cargamos un grafico en memoria:
   Sprite = m_gfx.MAP_LoadFromMemory(buffer(), 0)


Aca cargamos un grafico de la memoria (como bien dice la funcion), pero le estamos espesificando la variable (el array) de tipo byte donde estan alojados los graficos anteriormente cargados del .pak.
Pero, (disculpar por mi ignorancia), a que grafico nos estamos refiriendo aca?
Como hago para referirme a alguno en espesifico?
Gracias y saludos.

[EX3]

El array solo contiene un grafico, osea, la secuencia de bytes que componen fisicamente la imagen con toda su informacion de formato y demas datos.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

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

Pilton88


Pilton88

Cita de: "[EX3"]El array solo contiene un grafico, osea, la secuencia de bytes que componen fisicamente la imagen con toda su informacion de formato y demas datos.

Salu2...

Joya.
Pero, el hecho de agrupar los graficos en un .pak, es para que no se roben los graficos?
Pregunto esto, porque veo que se pueden descomprimir... con el pakexplorer por ejemplo, o otros similares.
Se agradece toda info que aporten.
Gracias y saludos.

[EX3]

Sencillamente es una manera de organizar los recursos de tu juego, graficos o no, en vez de tenerlos sueltos por archivos.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

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

Pilton88

Gracias EX3, ahora me quedo bastante mas claro su utilidad... mejor dicho, totalmente claro.
Saludos y gracias.






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.