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
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...
Ya encontre el problema, estaba dibujando el fondo sobre los personajes ejejje
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...