No entiendo MAP_SetRegion, no me es clara la documentacion, :shock:
si me dan un ejemplo real de como funciona lo voy a agradecer. :oops:
CitarNo entiendo MAP_SetRegion, no me es clara la documentacion :shock:
Increible! alguien que se ha mirado la documentacion antes de preguntar! :lol:
Es muy sencillo su concepto, te explico. Imagina que tienes un grafico del que solo quieres dibujar una porcion o 'region' de el en vez de todo el grafico.
MAP_SetRegion() te permite especificar que region del grafico quieres dibujar. Un sencillo ejemplo:
Tomando este grafico para el ejemplo:
(http://img466.imageshack.us/img466/2448/texture4sx.png)
El siguiente codigo dibuja 4 regiones diferentes del mismo grafico:
Option Explicit
Dim m_GFX As New dx_GFX_Class
Dim Texture As Long
Dim Looping As Boolean
Dim Region(3) As GFX_Rect 'Definimos 4 regiones diferentes.
Private Sub Form_Unload(Cancel As Integer)
Looping = False
End Sub
Private Sub Form_Load()
Me.Show
Call m_GFX.Init(Me.hWnd, 640, 480, 16, True)
Texture = m_GFX.MAP_Load("texture.png", 0)
Looping = True
Do While Looping
'Dibujamos una region de 128x128:
With Region(0)
.Width = 128
.Height = 128
End With
Call m_GFX.MAP_SetRegion(Texture, Region(0))
Call m_GFX.DRAW_Map(Texture, 0, 0, 0, 0, 0)
'Dibujamos una region de 128x128 tomando como origen la coordenada x = 128 del grafico:
With Region(1)
.X = 128
.Width = 128
.Height = 128
End With
Call m_GFX.MAP_SetRegion(Texture, Region(1))
Call m_GFX.DRAW_Map(Texture, 256, 0, 0, 0, 0)
'Dibujamos una region de 128x128 tomando como origen la coordenada y = 128 del grafico:
With Region(2)
.Y = 128
.Width = 128
.Height = 128
End With
Call m_GFX.MAP_SetRegion(Texture, Region(2))
Call m_GFX.DRAW_Map(Texture, 0, 256, 0, 0, 0)
'Dibujamos una region de 128x128 tomando como origen la coordenada x = 128, y = 128 del grafico:
With Region(3)
.X = 128
.Y = 128
.Width = 128
.Height = 128
End With
Call m_GFX.MAP_SetRegion(Texture, Region(3))
Call m_GFX.DRAW_Map(Texture, 256, 256, 0, 0, 0)
'Mostramos la escena:
Call m_GFX.Frame(m_GFX.ARGB_Set(255, 0, 0, 255))
Loop
Call m_GFX.MAP_Unload(Texture)
Call m_GFX.Terminate
End
End Sub
Una vez ejecutado el codigo quedaria asi la escena final:
(http://img355.imageshack.us/img355/5857/dxgfxregiones9tu.th.png) (http://img355.imageshack.us/my.php?image=dxgfxregiones9tu.png)
Esta funcion es util si por ejemplo tienes todos los fotogramas de una animacion en un solo grafico, de esta forma podrias ir dibujando el fotograma que necesites ahorrando asi memoria al solo tener un grafico en memoria y ser mas rapido que ir accediendo a varios graficos independientes. Esto es una tecnica muy comun desde hace muchos años.
Espero haberte solucionado la duda :wink:
Salu2...
perdon mi ignorancia [EX3] pero no me funciona tu codigo ya que me tira como error en todos los puntos donde dice m_GFX.
¿que puede ser ,o tengo que hacer antes otra cosa?
PD:¿que pasa en esta pagina que en todos los foros hay post para paginas porno,no los pueden parar a estos tipos?
Me imagino que te dira algo como "se esperaba =". En Visual Basic 6.0, si usas parentesis para encerrar los argumentos en una llamada a una rutina o funcion el compilador da por echo siempre que esa llamada es una funcion y que debe devolver un resultado, de lo contrario o no se usan los parentesis o se añade la instruccion Call al principio de la llamada. Gracias a Dios esta estupidez la corrigieron en Visual Basic .NET.
Segun recuerdo este codigo lo escribi de cabeza en vez de copiarlo de una prueba que hice (no me preguntes por que). Acabo de corregir el codigo añadiendo las instrucciones Call y alguna leve correccion mas, y ya funciona correctamente.
En fin, un pequeño error por mi parte, gracias por avisarlo ;)
Salu2...
a gracias [EX3] ahora funciona perfecto,perfecto.
:o
EX3... hay algo que no entiendo. ¿Por que hay que definir las regiones dentro del ciclo si o si?
Saludos
PD: Disculpen la ignorancia, pero aun no entre a entender muy bien la logica en la programacion de Juegos.