elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Ayuda] TileMap (Parallax Scrolling)
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] TileMap (Parallax Scrolling)  (Leído 5,252 veces)
sebah97

Desconectado Desconectado

Mensajes: 77



Ver Perfil
[Ayuda] TileMap (Parallax Scrolling)
« en: 27 Julio 2010, 00:57 am »

Hola, eh intentado crear un tilemap y lo eh conseguido (Dejo el Código)

Código
  1. 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
  2. Private Const SRCCOPY = &HCC0020
  3. Private Const SRCERASE = &H440328
  4. Private Const SRCINVERT = &H660046
  5. Private Const SRCPAINT = &HEE0086
  6. Private Const SRCAND = &H8800C6
  7. Private Const CLR_WATER = &HFF
  8. Private Const CLR_GRASS = &HFF00
  9. Private Const CLR_DIRT = &HC0C000
  10. Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
  11. Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
  12.  
  13.  
  14. Public Sub DibujarMapa()
  15.  
  16.  
  17.  
  18.  
  19. For y = 0 To 15
  20. For x = 0 To 15
  21.  
  22. z = GetPixel(Form1.Picture2.hdc, x, y)
  23. Debug.Print z
  24.  
  25. Select Case z
  26.  
  27.  
  28.    Case RGB(0, 0, 255)
  29.  
  30.        EsAgua x * 32, y * 32
  31.  
  32.  
  33.    Case RGB(128, 128, 128)
  34.  
  35.        EsCamino x * 32, y * 32
  36.  
  37.  
  38.    Case RGB(0, 255, 0)
  39.  
  40.        EsLlegada x * 32, y * 32
  41.  
  42. End Select
  43.  
  44. Next x
  45. Next y
  46.  
  47. End Sub
  48. Sub EsAgua(x, y)
  49.  
  50.  
  51. BitBlt Form1.Render.hdc, x, y, 32, 32, Form1.pic(0).hdc, 0, 0, SRCCOPY
  52.  
  53.  
  54.  
  55. End Sub
  56. Sub EsLlegada(x, y)
  57.  
  58.  
  59. BitBlt Form1.Render.hdc, x, y, 32, 32, Form1.pic(1).hdc, 0, 0, SRCCOPY
  60.  
  61. End Sub
  62. Sub EsCamino(x, y)
  63.  
  64.  
  65.  
  66. BitBlt Form1.Render.hdc, x, y, 32, 32, Form1.pic(2).hdc, 0, 0, SRCCOPY
  67.  
  68. End Sub
  69.  

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 Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: [Ayuda] TileMap (Parallax Scrolling)
« Respuesta #1 en: 27 Julio 2010, 02:20 am »

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"?

Código
  1. Private sub Form_Load()
  2. Ox=0
  3. Oy=0
  4. end sub
  5.  
  6. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  7.        if keycode=37 and Ox>0 then Ox=Ox-1
  8.        if keycode=38 and Oy>0 then Oy=Oy-1
  9.        if keycode=39 and Ox<picture2.width then Ox=Ox+1
  10.        if keycode=40 and Oy<picture2.height then Oy=Oy+1
  11. End Sub
  12.  
  13.  

Código
  1.  
  2. For y = 0 To 15
  3. For x = 0 To 15
  4.  
  5. z = GetPixel(Form1.Picture2.hdc,Ox + x, Oy + y)
  6. Debug.Print z
  7.  
  8. Select Case z
  9.  
  10.  
  11.    Case RGB(0, 0, 255)
  12.  
  13.        EsAgua x * 32, y * 32
  14.  
  15.  
  16.    Case RGB(128, 128, 128)
  17.  
  18.        EsCamino x * 32, y * 32
  19.  
  20.  
  21.    Case RGB(0, 255, 0)
  22.  
  23.        EsLlegada x * 32, y * 32
  24.  
  25. End Select
  26.  
  27. Next x
  28. Next y
  29.  
  30.  


En línea

sebah97

Desconectado Desconectado

Mensajes: 77



Ver Perfil
Re: [Ayuda] TileMap (Parallax Scrolling)
« Respuesta #2 en: 27 Julio 2010, 02:44 am »

Hola, primero que nada gracias por responder, pero probé el código y no me funciona :S

Algien tiene otra idea ??
En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: [Ayuda] TileMap (Parallax Scrolling)
« Respuesta #3 en: 27 Julio 2010, 04:16 am »

chequea esto:

Parallax Scrolling
En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: [Ayuda] TileMap (Parallax Scrolling)
« Respuesta #4 en: 27 Julio 2010, 04:24 am »

Código
  1.  Dim Ox As Integer
  2. Dim oY As Integer
  3. Dim sizMap As Integer
  4.  
  5. Private Sub Form_Load()
  6.    pic(0).Visible = False
  7.    pic(1).Visible = False
  8.    pic(2).Visible = False
  9.    picture2.Visible = False
  10.    pic(0).ScaleMode = 3
  11.    pic(1).ScaleMode = 3
  12.    pic(2).ScaleMode = 3
  13.    picture2.ScaleMode = 3
  14.    pic(0).BorderStyle = 0
  15.    pic(1).BorderStyle = 0
  16.    pic(2).BorderStyle = 0
  17.    picture2.BorderStyle = 0
  18.    pic(0).AutoSize = True
  19.    pic(1).AutoSize = True
  20.    pic(2).AutoSize = True
  21.    picture2.AutoSize = True
  22.    Me.ScaleMode = 3
  23.    Me.AutoRedraw = True
  24.  
  25.    Ox = 0
  26.    oY = 0
  27.    sizMap = 15
  28.    Call DibujarMapa
  29. End Sub
  30.  
  31. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  32.    If KeyCode = 37 And Ox > 0 Then Ox = Ox - 1
  33.    If KeyCode = 38 And oY > 0 Then oY = oY - 1
  34.    If KeyCode = 39 And Ox < picture2.Width - sizMap Then Ox = Ox + 1
  35.    If KeyCode = 40 And oY < picture2.Height - sizMap Then oY = oY + 1
  36.    Call DibujarMapa
  37. End Sub
  38. Public Sub DibujarMapa()
  39. Me.Cls
  40. For y = 0 To sizMap
  41. For x = 0 To sizMap
  42.  
  43. z = picture2.Point(Ox + x, oY + y)
  44. Debug.Print z
  45.  
  46. Select Case z
  47.  
  48.  
  49.    Case RGB(0, 0, 255)
  50.  
  51.        EsAgua x * 32, y * 32
  52.  
  53.  
  54.    Case RGB(128, 128, 128)
  55.  
  56.        EsCamino x * 32, y * 32
  57.  
  58.  
  59.    Case RGB(0, 255, 0)
  60.  
  61.        EsLlegada x * 32, y * 32
  62.  
  63. End Select
  64.  
  65. Next x
  66. Next y
  67.  
  68. End Sub
  69. Sub EsAgua(x, y)
  70. Me.PaintPicture pic(0), x, y, 32, 32
  71. End Sub
  72. Sub EsLlegada(x, y)
  73.    Me.PaintPicture pic(1), x, y, 32, 32
  74. End Sub
  75. Sub EsCamino(x, y)
  76.    Me.PaintPicture pic(2), x, y, 32, 32
  77. End Sub
  78.  

Sin Apis...
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Ayuda] TileMap (Parallax Scrolling)
« Respuesta #5 en: 27 Julio 2010, 05:45 am »

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

Mensajes: 77



Ver Perfil
Re: [Ayuda] TileMap (Parallax Scrolling)
« Respuesta #6 en: 27 Julio 2010, 06:56 am »

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

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 Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Ayuda] TileMap (Parallax Scrolling)
« Respuesta #7 en: 27 Julio 2010, 09:00 am »

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
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: [Ayuda] TileMap (Parallax Scrolling)
« Respuesta #8 en: 27 Julio 2010, 11:59 am »

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 Desconectado

Mensajes: 77



Ver Perfil
Re: [Ayuda] TileMap (Parallax Scrolling)
« Respuesta #9 en: 30 Julio 2010, 04:37 am »

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

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Scrolling Infinito no funciona en Chrome !!!
Desarrollo Web
Lupin 2 2,392 Último mensaje 6 Junio 2015, 20:19 pm
por Lupin
definitivamente me vuelvo loco con el scrolling
GNU/Linux
donepia 1 2,048 Último mensaje 5 Junio 2019, 01:09 am
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines