Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema con dibujado y clases

Iniciado por WilloW, 25 de Noviembre de 2007, 03:08:03 AM

« anterior - próximo »

WilloW

Hola que tal??, estoy haciendo un pequeño juego rpg parecido al argentum en vb.net, les cuento mi problema. Yo estaba trabajando todo sobre el evento form_load, hasta que decidi crear clases para el manejo de la logica de los enemigos, el personaje etc...
Entonces mas o menos guiandome por el ejemplo del matamarcianos cree 2 clases

La del personaje q uno utiliza:

Option Explicit On
Imports dx_lib32
Imports dx_lib32.Blit_Alpha
Imports dx_lib32.Blit_Filter
Imports dx_lib32.Blit_Mirror
Imports dx_lib32.Blit_Perspective
Imports dx_lib32.Key_Const
Imports dx_lib32.Mouse_Button
Imports dx_lib32.Text_Align
Public Class personaje
   Dim posX As Long, posY As Long, Width As Long, Height As Long
   Dim vidaac As Integer = 100
   Dim ataquee As Integer
   Dim manaaa As Integer
   Public id As Integer
   Property vida() As Integer
       Get
           Return vidaac
       End Get
       Set(ByVal value As Integer)
           vidaac = value
       End Set
   End Property
   Property ataque() As Integer
       Get
           Return ataquee
       End Get
       Set(ByVal value As Integer)
           ataquee = value
       End Set
   End Property
   Property mana() As Integer
       Get
           Return manaaa
       End Get
       Set(ByVal value As Integer)
           manaaa = value
       End Set
   End Property
   Property x() As Integer
       Get
           Return posX
       End Get
       Set(ByVal value As Integer)
           posX = value
       End Set
   End Property
   Property y() As Integer
       Get
           Return posY
       End Get
       Set(ByVal value As Integer)
           posY = value
       End Set
   End Property

   Public Sub New()
       posX = 240
       posY = 230
       Dim inf As GFX_Info
       Call m_gfx.MAP_GetInfo(enemigo, inf)
       Width = inf.Image_Width
       Height = inf.Image_Height
   End Sub
   Public Sub update()

   End Sub
   Public Sub draw()
       m_gfx.MAP_SetRegion(f1.Sprite, Regiones(i))
       ' m_gfx.DRAW_MapEx(f1.Sprite, x, y, 0, 0, 0)
       Call m_gfx.DRAW_MapEx(f1.Sprite, x, y, 0, 0, 0, 0, Blendop_Color, &HFFFFFFFF, Mirror_None, Filter_Bilinear, True)

   End Sub
End Class


y la del enemigo

Option Explicit On
Imports dx_lib32
Imports dx_lib32.Blit_Alpha
Imports dx_lib32.Blit_Filter
Imports dx_lib32.Blit_Mirror
Imports dx_lib32.Blit_Perspective
Imports dx_lib32.Key_Const
Imports dx_lib32.Mouse_Button
Imports dx_lib32.Text_Align
Public Class enemy
   Dim posX As Long
   Dim posY As Long
   Dim Width As Long, Height As Long
   Dim vidaac As Integer
   Dim ataquee As Integer
   Property vida() As Integer
       Get
           Return vidaac
       End Get
       Set(ByVal value As Integer)
           vidaac = value
       End Set
   End Property
   Property ataque() As Integer
       Get
           Return ataquee
       End Get
       Set(ByVal value As Integer)
           ataquee = value
       End Set
   End Property
   Property x() As Integer
       Get
           Return posX
       End Get
       Set(ByVal value As Integer)
           posX = value
       End Set
   End Property
   Property y() As Integer
       Get
           Return posY
       End Get
       Set(ByVal value As Integer)
           posY = value
       End Set
   End Property
   Public Sub update()
       distancia = m_system.MATH_GetDist(posicion.X, posicion.Y, posene.X, posene.Y)
       Form1.Label7.Text = distancia
       If distancia < 300 Then
           If colision = True Then
               f1.personaje.vida -= 10
               Threading.Thread.Sleep(100)
               f1.ListBox1.Items.Add("El enemigo te ha pegado")
           Else
               If Me.x < f1.personaje.x Then
                   Me.x += 1
               End If
               If Me.y < f1.personaje.y Then
                   Me.y += 1
               End If
               If Me.x > f1.personaje.x Then
                   posene.X -= 1
               End If
               If Me.y > f1.personaje.y Then
                   Me.y -= 1
               End If
               If Me.x = f1.personaje.x And Not Me.y = f1.personaje.y Then
                   If Me.y < f1.personaje.y Then
                       Me.y += 1
                   Else
                       Me.y -= 1
                   End If

               End If
               If Me.y = f1.personaje.y And Not Me.x = f1.personaje.y Then
                   If Me.x < f1.personaje.x Then
                       Me.x += 1
                   Else
                       Me.x -= 1
                   End If

               End If
               If Me.y = f1.personaje.y And Me.x = f1.personaje.x Then
                   Exit Sub
               End If
           End If
       End If
   End Sub
   Public Sub New()
       posX = m_system.MATH_Rand(100, 0)
       posY = m_system.MATH_Rand(100, 0)
       Dim inf As GFX_Info
       Call m_gfx.MAP_GetInfo(enemigo, inf)
       Width = inf.Image_Width
       Height = inf.Image_Height
   End Sub
   Public Sub draw()
       m_gfx.MAP_SetRegion(enemigo, enreg(anim))
       m_gfx.DRAW_Map(enemigo, x, y, 0, 0, 0)
   End Sub
End Class


y puse como ven una subrutina que se llama draw para dibujarlos.
Entonces cree los objetos personaje y enemy y en mi loop que esta en el evento form_load reemplaze el m_gfx.map que tenia del enemigo y del personaje por personaje.draw y enemigo.draw, cuando le doy ejecutar a la aplicacion ni el enemigo ni el personaje se crean en pantalla :S, alguien sabe que pasa? Salu2

[EX3]

Estoy viendo una llamada a un metodo "enreg()" y otro "Region()", en los metodos Draw() de ambas clases, que se supone te devuelve el area a dibujar de una imagen en una animacion. Has comprobado que te esten devolviendo valores correctos para el area de la imagen? (descarto la pregunta de si estas llamando a la funcion Frame() en cada ciclo del bucle principal y despues de llamar a las funciones de dibujo).

En principio el resto del codigo no veo nada mal a primera vista y con la informacion que me das (que es F1 y donde lo implementas? como tienes implementado el bucle principal, etc...) estando correctos los valores deberian dibujarse los sprites.

No se, prueba a poner un punto de interrupcion en el codigo de los metodos Draw() y depura linea a linea para revisar cualquier cosa que no vaya bien como algun valor incorrecto.

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

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

WilloW

Ya encontre el problema, estaba dibujando el fondo sobre los personajes ejejje

[EX3]

Problema en el orden de dibujado? Para otra ocasion recuerda que puedes definir de forma estricta el orden de dibujado de los graficos mediante su coordenada Z. Echate un ojo a la explicacion de "Z-Buffer" en la documentacion de la dx_lib32, este mecanismo puede resultar util en ciertas circunstancias :)

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

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






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.