Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - RobiHm

#871
General Programadores / Problemas con los combates xD
16 de Abril de 2007, 12:41:07 AM
Ante todo gracias por la ayuda

Mi problema radica en que la cpu cuando se mueve, llama a un procedimiento que mueve a todas sus unidades en un bucle, ésto se encuentra en la llamada de la lógica principal

si en ese bucle una unidad se pone a combatir o a curarse, no puedo mostrar su animación porque el bucle pasa a la siguiente unidad, que por orden se encuentra antes que la muestra de gráficos

Con lo que tu has comentado me solvento el problema de los movimientos del jugador, que era lo que tenía pensado, pero los de la cpu siguen igual xD

alguna otra idea?
#872
General Programadores / Problemas con los combates xD
15 de Abril de 2007, 09:19:54 PM
Saludos, soy nuevo en esto de programar para juegos y tengo problemas a la hora de programar el apartado gráfico de los combates.
Os explico:

Utilizo la librería dx_lib32 y el lenguaje de programación es vb6.

Creo un bucle central donde realizo las diferentes fases.

Interacción del Usuario.
Lógica.
Gráficos, Sonido y Texto.

Mi juego es un tablero, las unidades las mueves cada turno y realizan diferentes acciones. Una de ellas es luchar y curarse.

Cuando intento realizar un combate lo que quiero es detener el resto de procesos hasta que el combate finalice, pero como los gráficos van metidos al final del bucle y el combate se encuentra en lógica y tal, no puedo actualizar nada del mapa sin seguir con el resto de la lógica. No se si me he explicado con corrección.

Me gustaría detener todo hasta que termine de desarrollarse el combate.

Con los movimientos del usuarios por ahora creo que tengo la ligera idea de como solventar el problema de los combates, poniendo algunas variables que indiquen que solamente ejecute la animación del gráfico y nada más. Pero cuando mueve el ordenador(IA) no se me ocurre nada ya que no entra en el bucle principal para cada unidad, moviendo todas seguidas.

Ahora mismo estoy bastante confusndido de como hacerlo. Si alguien pudiese explicarme como se hace o me ofrece alguna ayudita le estaría muy agradecido xD

Gracias y disculpen las molestias
#873
Gracias por la ayuda redimensionaré/recortaré todas las imágenes a 64x64 y listo.

Lo de los colores lo queria transparente, solamente estaba trasteando con el ARGB xD

Las conversiones de twist y pixeles es debido a que yo usaba directamente direc 8 sin tu librería y declarabá las medidas en twist, lo puse de este modo como apaño, pero no lo dejaré asi xD
Ante todo gracias por las observaciones.

Respecto a los menús no he visto ningún ejemplo en los tutos. Pero supongo que será con clicks y coordenadas en el input.

Lo dicho muchas gracias xD
#874
Te coloco mi código


Imágen


definición de clase blablbal

Const MODO_VIDEO_ANCHO = 1280   'propiedades de pantalla
Const MODO_VIDEO_ALTO = 1024    '
Const MODO_BITS_COLOR = 32      '
Const MODO2_VIDEO_ANCHO = 800   'propiedades de pantalla
Const MODO2_VIDEO_ALTO = 600    '
Const MODO2_BITS_COLOR = 16      '

'Variable objeto que apunta a la clase dx_GFX:
Public m_gfx As dx_GFX_Class

' InicializarDX
Public Function InicializarDX(frm As Form, modo As Integer) As Boolean
On Error GoTo ErrHandler

   'Creamos la instancia de la clase dx_GFX:
   Set m_gfx = New dx_GFX_Class
   
   If modo = 2 Then
       'Inicializamos la clase y el modo de video a 640x480 en modo ventana:
       Call m_gfx.Init(frm.hWnd, MODO_VIDEO_ANCHO, MODO_VIDEO_ALTO, MODO2_BITS_COLOR, True)
   ElseIf modo = 1 Then
       Call m_gfx.Init(frm.hWnd, MODO_VIDEO_ANCHO, MODO_VIDEO_ALTO, MODO2_BITS_COLOR, False)
   End If
   Exit Function
ErrHandler:
   MsgBox Err.Description, , "Codigo de error: " & Err.Number
   Debug.Print "Codigo de error: " & Err.Number, Err.Description
   InicializarDX = False
End Function



Public GRA_UNIDADES As New Collection   'gráficos de unidades

carga (un procedimiento llamado carga todo que carga todo)

'cargamos los gráficos
   InicializarDX frmmapanormal, 2
  'unidades
   Cmd.CommandText = "select imagen from z_unidades"
   Set rs = Cmd.Execute
   While Not rs.EOF
           GRA_UNIDADES.Add m_gfx.MAP_Load(App.Path & "\images\unidades\" & rs!imagen & "-normal1" & ".png", 0, False), rs!imagen & "-normal1"
       rs.MoveNext
   Wend


visualización

 
   'generamos el fondo
   Call m_gfx.DRAW_Map(GRA_MIS("fondo"), 0, 0, 0, Me.Width, Me.Height)


'dibujamos las unidades
Cmd.CommandText = "select m.nx,m.ny,a.nombre,u.numframe,z.imagen " & _
    " from mapa m,u_unidades u,z_acciones a,z_unidades z" & _
    " where m.id=u.posicion and u.uaccion=a.id and z.uniid=u.uniid order by prioridad asc"
   Set tdib = Cmd.Execute
       'las recorremos
       Do While Not tdib.EOF
           'las dibujamos
           dibujame tdib!imagen & "-" & tdib!nombre & tdib!numframe, CLng(tdib!nx - 100), CLng(tdib!ny + 100), 1
           tdib.MoveNext
       Loop

'Ejecutamos las llamadas de la clase grafica:
   Call m_gfx.Frame(m_gfx.ARGB_Set(0, 255, 255, 255), 60)



procedimiento dibujame

'DIBUJA EN EL FORMULARIO EN LAS COORDENADAS x , y, se le envia con la ruta y true=borra anterior,false no borra
Private Sub dibujame(ruta As String, X As Long, Y As Long, tipo As Integer)
   Dim carga As Long
   If tipo = 1 Then
       carga = GRA_UNIDADES(ruta)
   ElseIf tipo = 2 Then
       carga = GRA_EFECTOS(ruta)
   ElseIf tipo = 3 Then
       carga = GRA_MIS(ruta)
   End If

   Call m_gfx.DRAW_MapEx(carga, CLng(X / Screen.TwipsPerPixelX), CLng(Y / Screen.TwipsPerPixelY), 0, 0, 0, 0, Blendop_Color, &HFFFFFFFF, Mirror_None, Blit_Filter.Filter_None, False)
 
End Sub



¿Existe alguna forma de solventarlo?
#875
Te subo una imágen de los gráficos con los que hago las pruebas, 72x72 (he probado anchando el mapa de pixels a 128x128 y se ve igual), es del Wesnoth. Por si quieres probarla.

[img=http://www.imaxenes.com/imagenes/piquero1mu64k8.png]

He probado lo que comentabas de los filtros y nada de nada sigue mostrandolo igual de borrosillo.

Respecto a lo del input quiero hacer una interfaz parecida a la del starcraft, nose si sabras como es, acciones de unidad, estado, caracteristicas y tal. Lo del ejemplo sería fabuloso.

Gracias por la ayuda, estoy aprendiendo bastante.
#876
Ante todo muchisimas gracias por responderme [EX3] .

Por ahora solo me lo tope en el DRAW_MapEx al mirar si era en pixeles o twist las coords, como no lo pone he supuesto que es en pixeles (lógico xD)

Citardx_GFX_class: DRAW_MapEx
DRAW_MapEx


buf hacer todo con el dx_Input va a ser bastante duro, más que nada porque tendré que hacerme unas cuantas imágenes y programar cientos de eventos manuales xD, pero asi aprendo a utilizar el input xD

Lo de la nitidez es lo que más me preocupa adjunto un ejemplo.



Si eso lo hace con el decorado con los muñecajos ni te cuento.
Todas las imágenes las tengo en png, y con otras clases/controles logro verlas correctamente, al cargarlas con la librería se ven borrosillas.
#877
Saludos cordiales, antes de nada felicitarte por el currele que has realizado con la librería y sobre todo con la documentación.
Decir que creo haber encontrado un pequeño fallo en la doc.
CitarY
Long. Coordenada vertical de dibujo. Para saber como funciona este parámetro leer información acerca del ZBuffer.
Z
Long. Coordenada de profundidad de dibujo.


Bueno os expongo mis dudillas/problemillas xD

Tengo un formulario a 1280x1024 en el que genero todo el tinglao.
Un mapa y el menú de usuario. Antes lo hacia en un MDI porque el juego dispone de más menús y demás, pero era imposible implementarlo con la librería.

Bueno los problemas son los siguientes.

Yo tengo controles y demás sobre el formulario para aprovechar sus eventos y ejecutar procesos concretos. Luego un par de timers, los de efectos y el de gráficos, mi problema surje cuando el de gráficos se ejecuta puesto que a veces actualiza (supongo que el form) y se nota el refresco de los otros controles. Tampoco me dibuja las líneas. Y los dibujos salen borrosos, he probado todos los filtros al cargar y en el que mejor se ve es sin filtro pero sigue borrososillo.

Mi duda es si los eventos de interfaz es recomendable hacerlo por controles o sin controles. Si es sin controles pordríais orientarme cómo hacerlo?.

Os pego el código, yo utilizo mysql como base de datos asi que quito las sentencias para ahorrar code.


Private Sub tmrdibuja_Timer()
   actualiza_graficos   'interval a 50
End Sub


'REFRESCA LOS GRÁFICOS
Private Sub actualiza_graficos()
   Dim X As Long, Y As Long
   Dim i As Integer
   
   'creamos los gráficos
   'generamos el fondo
   Call m_gfx.DRAW_Map(GRA_MIS("fondo"), 0, 0, 0, Me.Width, Me.Height)
   
'
   'dibujamos las casillas
   'creamos las casillas a lo ancho
   If optvercasillas(0).Value = True Then
       i = 0
       Do While i < NANCASILLAS
           m_gfx.DRAW_Line 0, i * TCASILLAS, NANCASILLAS * TCASILLAS, i * TCASILLAS, 0, m_gfx.ARGB_Set(0, 255, 255, 255)
           i = i + 1
       Loop
       'creamos las casillas a lo largo
       i = 0
       Do While i < NALCASILLAS
           m_gfx.DRAW_Line i * TCASILLAS, 0, i * TCASILLAS, NANCASILLAS * TCASILLAS, 0, m_gfx.ARGB_Set(0, 255, 255, 255)
           i = i + 1
       Loop
   End If
   
   'dibujamos los castillos
   Do While Not tdib.EOF
       'dibujamos
       dibujame "castillo", tdib!nx, tdib!ny + 200, 3
       tdib.MoveNext
   Loop
   
   'dibujamos los poblados
   Do While Not tdib.EOF
       'dibujamos
       dibujame "poblado", tdib!nx, tdib!ny + 200, 3
       tdib.MoveNext
   Loop
   
       
   'dibujamos las unidades
       'las recorremos
       Do While Not tdib.EOF
           'las dibujamos
           dibujame tdib!imagen & "-" & tdib!nombre & tdib!numframe, CLng(tdib!nx - 100), CLng(tdib!ny + 100), 1
           tdib.MoveNext
       Loop
       
   'dibujamos las banderas
       'las recorremos
       Do While Not tdib.EOF
           'las dibujamos
           X = tdib!nx - 50: Y = tdib!ny + 100
           For i = 0 To tdib!total
               dibujame "b" & tdib!jugador, X + i * 10, Y, 3
           Next i
           tdib.MoveNext
       Loop
   'sin tropas
       'las recorremos
       Do While Not tdib.EOF
           'las dibujamos
           If tdib!jugador = 0 Then
               dibujame "libre", tdib!nx - 50, tdib!ny + 100, 3
           Else
               dibujame "b" & tdib!jugador, tdib!nx - 50, tdib!ny + 100, 3
           End If
           tdib.MoveNext
       Loop
   
   'dibujamos los efectos
       'los recorremos
       Do While Not tdib.EOF
           'los dibujamos
           dibujame tdib!ngrafico & tdib!numframe, tdib!X, tdib!Y, 2
           tdib.MoveNext
       Loop
   
   'Ejecutamos las llamadas de la clase grafica:
   Call m_gfx.Frame(m_gfx.ARGB_Set(0, 255, 255, 255), 60)
End Sub


'DIBUJA EN EL FORMULARIO EN LAS COORDENADAS x , y
Private Sub dibujame(ruta As String, X As Long, Y As Long, tipo As Integer, Optional borro As Boolean = False)
   Dim carga As Long
   If tipo = 1 Then
       carga = GRA_UNIDADES(ruta)
   ElseIf tipo = 2 Then
       carga = GRA_EFECTOS(ruta)
   ElseIf tipo = 3 Then
       carga = GRA_MIS(ruta)
   End If
   Call m_gfx.DRAW_MapEx(carga, CLng(X / Screen.TwipsPerPixelX), CLng(Y / Screen.TwipsPerPixelY), 0, 0, 0, 0, Blendop_Color, &HFFFFFFFF, Mirror_None, Filter_None, False)
   
End Sub
#878
Proyecto dx_lib32 / MAP_Load "ColorKey"
29 de Enero de 2007, 01:14:51 AM
He estado mirando por la ayuda...

CitarPublic Function MAP_Load(
     Filename As String,
     Optional ColorKey As Long
     Optional Smooth As Boolean = Verdadero ) As Long



ColorKey
Optional. Long. Valor que define el color transparente para este grafico.


y me he topado con el Colorkey, he estado trasteando y tal pero no logro que haga nada, alguien me puede explicar como usarlo o sobre que se usa?

gracias
#879
Proyecto dx_lib32 / enorabuena
28 de Enero de 2007, 11:52:36 PM
enorabuena por la librería, acabo de encontrarme con ella y tiene muy buena pinta, lástima el no haberla encontrado antes xD

me gustaría preguntarte si la librería soporta funciones y demás para objetos 3d *.x mismamente





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.