Autor
|
Tema: [Ayuda] TileMap (Parallax Scrolling) (Leído 5,229 veces)
|
sebah97
Desconectado
Mensajes: 77
|
Hola, eh intentado crear un tilemap y lo eh conseguido (Dejo el Código) Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Const SRCCOPY = &HCC0020 Private Const SRCERASE = &H440328 Private Const SRCINVERT = &H660046 Private Const SRCPAINT = &HEE0086 Private Const SRCAND = &H8800C6 Private Const CLR_WATER = &HFF Private Const CLR_GRASS = &HFF00 Private Const CLR_DIRT = &HC0C000 Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long Public Sub DibujarMapa() For y = 0 To 15 For x = 0 To 15 z = GetPixel(Form1.Picture2.hdc, x, y) Debug.Print z Select Case z Case RGB(0, 0, 255) EsAgua x * 32, y * 32 Case RGB(128, 128, 128) EsCamino x * 32, y * 32 Case RGB(0, 255, 0) EsLlegada x * 32, y * 32 End Select Next x Next y End Sub Sub EsAgua(x, y) BitBlt Form1.Render.hdc, x, y, 32, 32, Form1.pic(0).hdc, 0, 0, SRCCOPY End Sub Sub EsLlegada(x, y) BitBlt Form1.Render.hdc, x, y, 32, 32, Form1.pic(1).hdc, 0, 0, SRCCOPY End Sub Sub EsCamino(x, y) BitBlt Form1.Render.hdc, x, y, 32, 32, Form1.pic(2).hdc, 0, 0, SRCCOPY End Sub
Y Funciona muy Bien (Les dejo una Foto) (Si se dan Cuenta, lo que hace es Leer Pixel x Pixel la imagen del picture 2, y depende a que pixel sea, Carga una textura.) Bien, pero Ahora mi Duda: ¿Como Hago para hacer una especie de Parallax Scrolling? Porque de esta manera solo estaria limitando al mapa a ese tamaño que ustedes ven ):? Bien, espero que me puedan ayudar, y gracias de AnteMano
|
|
|
En línea
|
|
|
|
ignorantev1.1
Desconectado
Mensajes: 617
/\ Así acabo cuando quiero programar...
|
Y si utilizaras 2 variables auxiliares, para el origen, "Ox" y "Oy", que seria el lugar apartir de donde se comenzaria a leer el "picture2"? Private sub Form_Load() Ox=0 Oy=0 end sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) if keycode=37 and Ox>0 then Ox=Ox-1 if keycode=38 and Oy>0 then Oy=Oy-1 if keycode=39 and Ox<picture2.width then Ox=Ox+1 if keycode=40 and Oy<picture2.height then Oy=Oy+1 End Sub
For y = 0 To 15 For x = 0 To 15 z = GetPixel(Form1.Picture2.hdc,Ox + x, Oy + y) Debug.Print z Select Case z Case RGB(0, 0, 255) EsAgua x * 32, y * 32 Case RGB(128, 128, 128) EsCamino x * 32, y * 32 Case RGB(0, 255, 0) EsLlegada x * 32, y * 32 End Select Next x Next y
|
|
|
En línea
|
|
|
|
sebah97
Desconectado
Mensajes: 77
|
Hola, primero que nada gracias por responder, pero probé el código y no me funciona :S
Algien tiene otra idea ??
|
|
|
En línea
|
|
|
|
|
ignorantev1.1
Desconectado
Mensajes: 617
/\ Así acabo cuando quiero programar...
|
Dim Ox As Integer Dim oY As Integer Dim sizMap As Integer Private Sub Form_Load() pic(0).Visible = False pic(1).Visible = False pic(2).Visible = False picture2.Visible = False pic(0).ScaleMode = 3 pic(1).ScaleMode = 3 pic(2).ScaleMode = 3 picture2.ScaleMode = 3 pic(0).BorderStyle = 0 pic(1).BorderStyle = 0 pic(2).BorderStyle = 0 picture2.BorderStyle = 0 pic(0).AutoSize = True pic(1).AutoSize = True pic(2).AutoSize = True picture2.AutoSize = True Me.ScaleMode = 3 Me.AutoRedraw = True Ox = 0 oY = 0 sizMap = 15 Call DibujarMapa End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 37 And Ox > 0 Then Ox = Ox - 1 If KeyCode = 38 And oY > 0 Then oY = oY - 1 If KeyCode = 39 And Ox < picture2.Width - sizMap Then Ox = Ox + 1 If KeyCode = 40 And oY < picture2.Height - sizMap Then oY = oY + 1 Call DibujarMapa End Sub Public Sub DibujarMapa() Me.Cls For y = 0 To sizMap For x = 0 To sizMap z = picture2.Point(Ox + x, oY + y) Debug.Print z Select Case z Case RGB(0, 0, 255) EsAgua x * 32, y * 32 Case RGB(128, 128, 128) EsCamino x * 32, y * 32 Case RGB(0, 255, 0) EsLlegada x * 32, y * 32 End Select Next x Next y End Sub Sub EsAgua(x, y) Me.PaintPicture pic(0), x, y, 32, 32 End Sub Sub EsLlegada(x, y) Me.PaintPicture pic(1), x, y, 32, 32 End Sub Sub EsCamino(x, y) Me.PaintPicture pic(2), x, y, 32, 32 End Sub
Sin Apis...
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
. Es mucho mejor con Apis... pero si es muy serio entonces seria con DirectX y/o OpenGL!¡.
Dulces Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
sebah97
Desconectado
Mensajes: 77
|
. Es mucho mejor con Apis... pero si es muy serio entonces seria con DirectX y/o OpenGL!¡.
Dulces Lunas!¡.
Si, tenes razon, es mejor con OpenGl o DirectX, pero yo quiero empezar por asi decirlo "UN MOTOR" (SI así se le puede llamar) desde 0 Y Con Respecto al Parallax Scrolling, no lo pude hacer funcionar Una idea mia era cargar todo el mapa en la memoria, y a medida que aprieto tal tecla, lo ba mostrando de a partes. Pero nose si funciona, y si funcionara, no sabría como hacerlo
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
manejalo por niveles
digamos que tienes
Nivel 1 <-- Compo mas cercano Nivel 2 <-- campo donde esta el personaje Nivel 3 <-- Nose digamos que montañas o algo al fondo Nivel 4 <-- Fondo
así en el campo mas cercano tiene velocidad "N" en niveles mas superiores (es decir con mayor profundidad) solo divides siendo cada nivel divisible entre 3 por decir algo
así
N 1 = N N 2 = N/3 N 3 = N/3/3 N 4 = N/3/3/3 N X = N/3/.../X-1
P.D.: Mientras mas nivel mas lento su desplazamiento (X,Y y si es 3D incluyendo a Z)!¡.
Dulces Lunas!¡.
|
|
« Última modificación: 27 Julio 2010, 09:04 am por BlackZeroX »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
LeandroA
|
Hola, lo primero que tienes que hacer es que crear un editor de mapa y luego el juego, el editor de mapa lo que deve hacer es crear una matriz de dos dimenciones M(X,Y) el editor deve cargar en cada datos de esa matriz un valor el cual corresponde a una imagen, esta matriz la guardas en un archivo la cual despues leera el juego luego el segun el movimiento del personaje tienes que pintar el hdc con los elementos correspondientes de la matriz, podes crear un mapa tan grande como quieras vos en el hdc solo vas a pintar solo la cantidad de fragmentos que entren en el hdc no uses getpixel (es muy lento e insesario) vos con los valores de la matriz ya vas a saver a que corresponde cada elemento si es solido, agua, etc.
se entiende?
Saludos.
|
|
|
En línea
|
|
|
|
sebah97
Desconectado
Mensajes: 77
|
Hola, Gracias a todos, ya solucioné el tema del Parallax.
Bien, Ya que estamos, para no crear otro tema, Como hago para Guardar el Contenido de un IMAGE ?? (No Confundan con PictureBox !! )
Bien, gracias y espero que Respuestas.
Desde ya Muchas gracias
|
|
|
En línea
|
|
|
|
|
|