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

Temas - Hechelion

#61
General / juego de adivinanzas, será AI?
25 de Marzo de 2009, 08:21:11 AM
Buenas, por una pequeña discusión en otro foro he decidido preguntar acá.
es un juego que mediante una serie de preguntas intenta adivinar el personaje en el cual pensamos.
http://es.akinator.com/#

la duda es si a algo así se le puede considerar AI o no.
#62
Buenas.

me encuentro trabajando en la prueba del juego de naves horizontal, estaba programando los disparos y las naves enemigas, creándolos de forma dinámica según aparecen en pantalla y destruyendo los objetos cuando ya no son necesarios, pero me ha entrado la duda si no sería más eficiente tener precargados una cantidad de objetos con una variable que indique si están en uso o no.

por ejemplo, para los disparos de las naves.
si el juego dura 180 segundos y puedes disparar hasta 3 veces por segundo, significa que en el transcurso del programa se habrán creado y destruido un total de 540 objetos, sin embargo en el mejor de los casos en pantalla sólo existirán 10 disparos a la vez, en este caso no sería más eficiente tener un array con 10 objetos_disparo ya creados con una marca que indique si están en uso o no.
#63
General / VB6 + DxLib32 = Scroll Parallax
21 de Febrero de 2009, 08:50:14 AM
un vídeo de Scroll Parallax para un sencillo juego de naves, creado con la librería de ex3 e integra con VB6

http://www.youtube.com/watch?v=K82Gu_dIT5Y

También aprovecho de tantear el terreno y saber si existe algún interesado en quedarse con el proyecto y diseñar niveles, ya que comentaba en el subforo de la librería que este proyecto sólo lo estoy desarrollando para pulir clases y otras cosas referentes a programación, mi idea es conseguir que toda (o por lo menos la gran mayoría) del juego se configure mediante archivos de texto (las animaciones y el fondo ya funcionan de esa manera).
#64
buenas.

estoy haciendo un pequeño juego de naves con scroll horizontal y scroll parallax (para probar las clases que he creado) , el problema que tengo es que estoy intentando que el fondo del juego se desplace lentamente pero cada vez que programa que el fondo avance unos 6 pixel por segundo (tengo 60 FPS)  se ve horrible ya que el fondo se ve estático por 10 Frame y de pronto avanza uno dañando la estética (no se ve fluida la animación).
¿hay alguna forma de solucionar ésto o simplemente tengo que fijarme un limite de un pixel por frame en los desplazamientos?
#65
Proyecto dx_lib32 / Animación, clase y GUI para crearla
16 de Febrero de 2009, 08:26:13 AM
Clase para control de animaciones a partir de archivo AAD (archivo de animación DXlib32)

EVENTOS
StopAnim -> se activa al momento de terminar una secuencia de animación que no sea infinita

Propiedades
AnimName -> recupera el nombre de la animación en curso

AnimIndex -> recupera el indice de la animación en curso

Mirror As Blit_Mirror -> determina si la animación se dibujara con algún tipo de espejo.

LastAnimName -> recupera el nombre de la última animación ejecutada antes de la actual

LastAnimIndex -> recupera el indice de la última animación ejecutada antes de la actual

AnimForFault -> determina cual animación se utilizara por defecto. (está animación se dispara por defecto al terminar cualquier otra animación).

Pause -> Pausa/ Recuepra la ejecución del ciclo de avance de animación. (Se puede usar para evitar que la animación avance pero sin dejar de dibujar)

Procedimientos
Init(nGFX As dx_GFX_Class, nSystem As dx_System_Class, Optional RutaAAD As String)
-> se utiliza para iniciar el objeto entregnado las referencias a las clases de la libreria DxLib32
RutaAAD-> opcional entregar la cadena o la ruta al arhcivo AAD que contiene la información de la animación

Terminate-> se utiliza para terminar el objeto y descargar todos los elementos gráficos cargados en memoria

Draw(PosX As Long, PosY As Long, Z As Long, Optional Angulo As Single,  Optional Transparencia As Long, Optional Zoom As Long)
-> se utiliza para dibujar el objeto
PosX -> coordenada del eje X donde desea dibujar la animación
PosY -> coordenada del eje Y donde desea dibujar la animación
Z -> igual que el Z de Map_Draw
Angulo -> Permite rotar la animación, igual que Map_Draw.
Transparencia -> valor de 0 a 100 que determina si la imagen debe llevar transparencia
Zoom -> permite aumentar el tamaño de la imagen. (no probado)

LoadADD(ruta As String, SinImagen as Boolean)
-> se utiliza para cargar la cadena AAD o la ruta al archivo AAD que contiene la información de la animación. cuando se carga una cadena AAD la clase se encarga de cargar los recursos gráficos necesarios
Si SinImagen es verdadero, la clase omite la carga de los archivos gráficos, siendo necesario agregarlos a mano

Play(NameAnim As String, Optional Repeat As Boolean)
-> se utiliza para indicar que se ejecute una animación
NameAnim -> indica el nombre o el indice de la animación a reproducir
Repeat -> determina si la animación se repite de forma infinita o no

GetAnimName(Index As Integer) as String
-> obtiene el nombre de una animación a partir de su valor indice

GetAnimIndex(Name As String) As Integer
-> obtiene el indice de una animación a partir de su nombre

GetRect(Index As Integer) As GFX_Rect
-> retorna la información del los rectangulos para colisiones.

Clone() As ClsAnim
-> se utiliza para clonar el objeto sin recargar los recursos gráficos

Z0 a Z5 -> NO UTILIZAR, son funciones reservadas para la clonación

NOTAS
utilice la función clone para crear copias individuales de las referencias a la clase sin recargar los recursos gráficos. Los objetos creados mediante CLONE no deben ser terminados, ya que la función terminate de la clase descarga los recursos gráficos.

Los Datos AAD se pueden pasar como un unico STRING o como una ruta a un fichero AAD, la ventaja de que se puede pasar el contenido del fichero AAD como un String es que permite cargar el archivo a una variable String, procesarlo y luego entregarlo a la clase.

Descargar:

Descarga Editor Animación Binario

Descarga Editor Animación Código Fuente (sólo VB6)

Descarga Clase con ejemplo vb6

Descarga Clase con ejemplo vb .NET
#66
Proyecto dx_lib32 / Animaciones
09 de Febrero de 2009, 11:20:40 PM
Buenas, abro este post para comentar el proyecto que estoy realizando.

básicamente es una clase para manejar animaciones desde FrameSet, la gracia es una herramienta (también creada con VB) que permite crear de forma simple las animaciones, las exporto a un arhivo aad (archivo de animación DXlib32), el proyecto ya va en un 50% y espero poder subir la herramienta y la clase durante el transcurso de la semana.
#67
Proyectos / Khonquista
08 de Febrero de 2009, 04:29:53 AM
Saludos.

Aprovecho de comentar que he terminado mi proyecto Khonquista basado en la librería DXlib32 de ex3 para VB.
acá el link al post con las imágenes y las descargas por si alguien se anima a probarlo, el primer link de descarga es al código fuente y se precisa descargar he instalar las librerias de ex3 y VB para poder ejecutarlo, el segundo es la descarga de un instalable que incluye y registra las librerias necesarias para correr el juego, además al momento de instalarlo se genera el archivo para desinstalar la aplicación, el archivo leame.txt incluye los detalles de los archivos instalados.

http://www.stratos-ad.com/forums/index.php?topic=9323.0
#68
Proyecto dx_lib32 / Problema con reproducción OGG al compilar
06 de Febrero de 2009, 09:33:32 AM
Buenas, acabo de dar por terminado el proyecto, así que lo compilé (de paso encontré unos problemas en la clase que publique, luego los corrijo) y lo ejecuté desde el .exe, para mi sorpresa al ejecutar el programa compilado éste no reproduce la música de fondo, pero si lo ejecuto desde VB tengo música.

¿alguna sugerencia de éste extraño compirtamiento?

PD: No es problema de rutas ni nada a ese estilo, pues los sonidos de efecto si se ejecutan
Código (vb) [Seleccionar]

Private Sub IniciarSonido()
'Cargamos música en memoria
MusicaFondo = m_Sound.MUSIC_Load(App.Path & "\Recursos\sound\artificial_intelligence_v3.ogg")

'Cargamos efectos de sonido
SndTeclear = m_Sound.SOUND_Load(App.Path & "\Recursos\sound\text_typing2.wav")
SndClickBoton = m_Sound.SOUND_Load(App.Path & "\Recursos\sound\button_click2.wav")
SndClickPlaneta = m_Sound.SOUND_Load(App.Path & "\Recursos\sound\fleet_button_rollover2.wav")
SndAlarma = m_Sound.SOUND_Load(App.Path & "\Recursos\sound\alert.wav")

End Sub
[
#69
Proyecto dx_lib32 / Clase Mensajes
02 de Febrero de 2009, 08:08:40 PM
Buenas, en la medida de lo posible iré colocando algunas clases que he creado para la librería, no son muchas pero algo es algo.
Código (vb) [Seleccionar]

''/***************************************************************
'*
'* Proyecto dx_lib32 2.2 -
'* Clase Lista de mensaje (MsgList)
'*
'* Requiere la dependendica a la libreria dx lib32 2.2.0
'*
'* Santiago de Chile Octubre 2008
'* Hechelion (Alberto Ortiz Barrera)
'*
'***************************************************************/

'/***************************************************************
'*
'* el alpfa se entrega como un porcentaje (0-100) con la propiedad opacidad
'* Por defecto se dibuja un cuadrado negro
'* Se a agregado una segunda opacidad (OpacidadSec) que se puede activar con
'* al tener el mouse encima o con al ganar foco
'*
'***************************************************************/

'/***************************************************************
'*
'* Prefijos:
'* p = privado
'* n = Nuevo
'* r = Referencia
'*
'* Sufijos
'* D = Dimención, utilizado para estructuras GFX_Rect
'*
'***************************************************************/
Option Explicit

Public Enum EnumTransparenciaCMsgList
    Msg_none = 0
    Msg_Only_Cursor = 1
    Msg_Only_Focus = 2
    Msg_Focus_OR_Cursor = 3
End Enum
'**********************************************************************
'Eventos
'**********************************************************************
Public Event Click()
Public Event GotFocus()
Public Event LostFocus()
Public Event GotCursor()
Public Event LostCursor()

'**********************************************************************
'variables privadas
'**********************************************************************
'Clases de la libreria dx_lib32.DLL
Dim p_gfx As dx_GFX_Class 'Referencia a la clase dx_GFX:
Dim p_Input As dx_Input_Class 'Referencia a la clase dx_Input.
Dim p_System As dx_System_Class 'Referencia a la clase dx_System

Dim Lista() As String 'Lista de cadenas de texto
Dim ListaDraw() As String 'Lista de la parte visible de las cadenas

Dim pOpacidad As Integer 'Opacidad
Dim pOpacidadSec As Integer 'Opacidad secundaria
Dim AlphaActual As Integer
Dim AlphaFinal As Integer

'Dim AltoTexto As Long 'alto en pixel asignados a una cadena
Dim pFont As Long 'referencia a la fuente a utilizar
Dim MaxLineas As Integer 'número total de lineas visibles dado el alto del marco
Dim Linea1 As Integer 'indice del array para la primera línea visible
Dim BordeSuperior As Long 'Margen superior entre texto y el borde del control
Dim BordeInferior As Long 'Margen inferior entre texto y el borde del control
Dim BordeDerecho As Long 'Margen inferior entre texto y el borde del control, el borde izquierdo es controlado por la variable Sangria
Dim AutoAjuste As Boolean

Dim DibujarAscensor As Boolean
Dim AscensorValor As Integer
Dim AscensorMax As Integer

Dim MarcoD As GFX_Rect 'Dimenciones del rectangulo que contiene el mensaje
Dim MarcoTextoD As GFX_Rect 'Dimenciones del rectangulo interno que contiene el texto
Dim AscensorD(2) As GFX_Rect 'Dimenciones de los rectangulos que dibujan el ascensor
Dim pfoco As Boolean
Dim pFocoPrevio As Boolean
Dim pCursorSobre As Boolean
Dim pCursorSobrePrevio As Boolean

Dim Left_Click_ant As Boolean

'Contenedores de las referencias de las imagenes utilizadas
Dim rEsquina1 As Long
Dim rBordeH As Long
Dim rBordeV As Long
Dim rFondo As Long

Dim HayEsquina1 As Boolean
Dim HayBordeH As Boolean
Dim HayBordeV As Boolean
Dim HayFondo As Boolean

Dim InfoEsquina1 As GFX_Info
Dim InfoBordeH As GFX_Info
Dim InfoBordeV As GFX_Info

'**********************************************************************
'Propiedades
'**********************************************************************
Public Visible As Boolean 'propiedad que determina si se debe o no dibujar el control
Public UseTransparency2 As EnumTransparenciaCMsgList

'Public BackRed As Integer 'Componente rojo del color de fondo
'Public BackGreen As Integer 'Componente verde del color de fondo
'Public BackBlue As Integer 'Componente azul del color de fondo
Public Zbuffer As Long
Public BorderColor As Long
Public BackColor As Long

Public FontColor As Long
Public Sangria As Long 'margen izquierdo entre texto y borde del control

Public ForceTransparency2 As Boolean 'Orden para forzar a segunda transparencia sin importar la condición

Public Property Let Top_Margin(nMargenSuperior As Long)
BordeSuperior = nMargenSuperior
Redimencionar
End Property
Public Property Get Top_Margin() As Long
Top_Margin = BordeSuperior
End Property
Public Property Let Low_Margin(nMargenInferior As Long)
BordeInferior = nMargenInferior
Redimencionar
End Property
Public Property Get Low_Margin() As Long
Low_Margin = BordeInferior
End Property
Public Property Let Left_Margin(nSangria As Long)
Sangria = nSangria
Redimencionar
End Property
Public Property Get Left_Margin() As Long
Left_Margin = Sangria
End Property

Public Property Let Right_Margin(nMargin As Long)
BordeDerecho = nMargin
End Property

Public Property Get Right_Margin() As Long
Right_Margin = BordeDerecho
End Property


Public Property Let AutoFitText(nAutoAjuste As Boolean)
AutoAjuste = nAutoAjuste
Comprobar_Ancho
End Property
Public Property Get AutoFitText() As Boolean
AutoFitText = AutoAjuste
End Property

'Obtener porcentaje de Opacidad
Public Property Let Transparency(nOpacidad As Integer)
pOpacidad = (Saturar(100 - nOpacidad, 0, 100) * 255 / 100)
End Property
Public Property Get Transparency() As Integer
Transparency = 100 - pOpacidad * 100 / 255
End Property

'Obtener porcentaje de Opacidad Secundaria
Public Property Let Transparency2(nOpacidad As Integer)
pOpacidadSec = (Saturar(100 - nOpacidad, 0, 100) * 255 / 100)
End Property
Public Property Get Transparency2() As Integer
Transparency2 = 100 - pOpacidadSec * 100 / 255
End Property

Public Property Let Focus(nFoco As Boolean)
pfoco = nFoco
End Property

Public Property Get Focus() As Boolean
Focus = pfoco
End Property


'Propiedad Font
Public Property Let Font(nFont As Long)
pFont = nFont 'obtener la referencia a la fuente cargada en memoria
'Calcular área visible a partir de la nueva fuente
'AltoTexto
Comprobar_Alto
Comprobar_Ancho
End Property
Public Property Get Font() As Long
Font = pFont
End Property

'PROPIEDADES POSCISIÓN
'Alto
Public Property Let Height(nHeight As Long)
MarcoD.Height = nHeight
Redimencionar
End Property
Public Property Get Height() As Long
Height = MarcoD.Height
End Property
'Ancho
Public Property Let Width(nWidth As Long)
MarcoD.Width = nWidth
Redimencionar
End Property
Public Property Get Width() As Long
Width = MarcoD.Width
End Property
'Posión X LEFT
Public Property Let Left(nLeft As Long)
MarcoD.X = nLeft
Redimencionar
End Property
Public Property Get Left() As Long
Left = MarcoD.X
End Property
'Posición Y TOP
Public Property Let Top(nTop As Long)
MarcoD.Y = nTop
Redimencionar
End Property
Public Property Get Top() As Long
Top = MarcoD.Y
End Property

'Propiedades de gráficos
'Gráfico 1 para la esquina
Public Property Let Map_Corner(nEsquina1 As Long)
rEsquina1 = nEsquina1
HayEsquina1 = True
Call p_gfx.MAP_GetInfo(rEsquina1, InfoEsquina1)
End Property
Public Property Get Map_Corner() As Long
Map_Corner = rEsquina1
End Property

'Gráfico borde
Public Property Let Map_BorderH(nBorde As Long)
rBordeH = nBorde
HayBordeH = True
Call p_gfx.MAP_GetInfo(rBordeH, InfoBordeH)
End Property
Public Property Get Map_BorderH() As Long
Map_BorderH = rBordeH
End Property

'Gráfico borde
Public Property Let Map_BorderV(nBorde As Long)
rBordeV = nBorde
HayBordeV = True
Call p_gfx.MAP_GetInfo(rBordeV, InfoBordeV)
End Property
Public Property Get Map_BorderV() As Long
Map_BorderV = rBordeV
End Property

'Gráfico fondo
Public Property Let Map_Picture(nPicture As Long)
rFondo = nPicture
HayFondo = True
End Property
Public Property Get Map_Picture() As Long
Map_Picture = rFondo
End Property

'Forzar foco
Public Property Let Foco(nFoco As Boolean)
pfoco = nFoco
End Property

Public Property Get Foco() As Boolean
Focus = pfoco
End Property


'**********************************************************************
'Procedimientos Privados
'**********************************************************************
Private Sub Class_Initialize()

pOpacidad = 128
pOpacidadSec = 255
Sangria = 10
BordeSuperior = 10
BordeInferior = 10
BordeDerecho = 40
AlphaActual = pOpacidad
FontColor = &HFFFFFF
Visible = True
AutoAjuste = True

ReDim Lista(0)
ReDim ListaDraw(0)
Limpiar_Lista
End Sub

Private Sub Limpiar_Lista()
Dim i As Integer
For i = 0 To UBound(Lista)
    Lista(i) = ""
    ListaDraw(i) = ""
Next
End Sub

Private Function Saturar(ByVal Valor As Integer, ByVal Min As Integer, ByVal Max As Integer) As Integer
Saturar = Valor
If Valor < Min Then Saturar = Min
If Valor > Max Then Saturar = Max
End Function

Private Sub Alto_Texto()
'AltoTexto = p_gfx.FONT_SystemGetTextHeight(pFont, "Tgj" & vbCrLf & "Hola") + 2
End Sub

Private Sub Redimencionar()
Dim nHeight As Long
Dim nWidth As Long

MarcoTextoD.X = MarcoD.X + Sangria
MarcoTextoD.Y = MarcoD.Y + BordeSuperior

'comprobar si existe cambio en la altura del marco para minimizar el número de llamados a calculos de texto visible
nHeight = MarcoD.Height - BordeSuperior - BordeInferior
If nHeight <> MarcoTextoD.Height And nHeight > 10 Then
    MarcoTextoD.Height = nHeight
    Comprobar_Alto
End If

'comprobar si existe cambio en el ancho del marco para minimizar el número de llamados a calculos de texto visible
nWidth = MarcoD.Width - Sangria - BordeDerecho 'Se reservan 40 pixel al lado derecho para dibujar el ascensor
If nWidth <> MarcoTextoD.Width And nWidth > 10 Then
    MarcoTextoD.Width = nWidth
    Comprobar_Ancho
End If

'Dimensionar ascensor
AscensorD(0).X = MarcoD.X + MarcoD.Width - 35
AscensorD(0).Y = MarcoTextoD.Y
AscensorD(0).Width = 20
AscensorD(0).Height = 30
AscensorD(1).X = AscensorD(0).X
AscensorD(1).Y = MarcoTextoD.Y + AscensorD(0).Height
AscensorD(1).Width = 20
AscensorD(1).Height = MarcoTextoD.Height - 60
AscensorD(2).X = AscensorD(0).X
AscensorD(2).Y = AscensorD(1).Y + AscensorD(1).Height
AscensorD(2).Width = 20
AscensorD(2).Height = 30


End Sub

Private Sub Comprobar_Alto() 'Comprueba la cantidad de líneas que se pueden visualizar
Dim i As Integer
Dim Cadena As String
Dim gato As Integer

i = 0
Cadena = "Tgj"
Do While MarcoTextoD.Height > p_gfx.FONT_SystemGetTextHeight(pFont, Cadena) + 2
    Cadena = Cadena & vbCrLf & "Tgj"
    i = i + 1
Loop
MaxLineas = i
End Sub

Private Sub Comprobar_Ancho() 'Reviza toda la lista ListaDraw a partir del ancho actual
Dim i, e As Integer
Dim Cadena As String

For i = 0 To UBound(Lista)
    Cadena = Lista(i)
    Do While p_gfx.FONT_SystemGetTextWidth(pFont, Cadena) >= MarcoTextoD.Width
        Cadena = Mid(Cadena, 1, Len(Cadena) - 1)
    Loop
    ListaDraw(i) = Cadena
Next
End Sub

'**********************************************************************
'Procedimientos Publicos
'**********************************************************************
Public Sub Iniciar(Tgfx As dx_GFX_Class, Tinput As dx_Input_Class, TSystem As dx_System_Class, TFont As Long, Optional Theigth As Long, Optional TWidth As Long, Optional TTop As Long, Optional TLeft As Long)
'asignar clases externas
Set p_gfx = Tgfx
Set p_Input = Tinput
Set p_System = TSystem
pFont = TFont
'asignar valores
If Theigth > 0 Then Height = Theigth
If TWidth > 0 Then Width = TWidth
Top = TTop
Left = TLeft
End Sub

Public Sub Draw()
Dim i As Integer
Dim Posy As Long
Dim PartX As Long
Dim PartY As Long
Dim Cadena As String
Dim LineasDraw As Integer
Dim TempColor As Long

If Visible Then
    'dibujar fondo del control
    If HayFondo Then
        TempColor = p_gfx.ARGB_Set(AlphaActual, 255, 255, 255)
        Call p_gfx.DRAW_MapEx(rFondo, MarcoD.X, MarcoD.Y, Zbuffer, MarcoD.Width, MarcoD.Height, 0, Blendop_Color, TempColor, Mirror_None, Filter_None, False)
    Else
        TempColor = p_gfx.ARGB_Set(AlphaActual, (BackColor And &HFF0000) / 65536, (BackColor And &HFF00&) / 256, (BackColor And &HFF))
        Call p_gfx.DRAW_Box(MarcoD.X, MarcoD.Y, MarcoD.Width + MarcoD.X, MarcoD.Height + MarcoD.Y, Zbuffer, TempColor, True, TempColor)
    End If
   
   
    'Dibujar esquinas, si corresponde
    TempColor = p_gfx.ARGB_Set(AlphaActual, 255, 255, 255)
    If HayEsquina1 Then
        Call p_gfx.DRAW_MapEx(rEsquina1, MarcoD.X, MarcoD.Y, Zbuffer, InfoEsquina1.Image_Width, InfoEsquina1.Height, 0, Blendop_Color, TempColor, Mirror_None, Filter_None, False)
        Call p_gfx.DRAW_MapEx(rEsquina1, MarcoD.X + MarcoD.Width - InfoEsquina1.Image_Width, MarcoD.Y, Zbuffer, InfoEsquina1.Image_Width, InfoEsquina1.Height, 0, Blendop_Color, TempColor, Mirror_Vertical, Filter_None, False)
        Call p_gfx.DRAW_MapEx(rEsquina1, MarcoD.X, MarcoD.Y + MarcoD.Height - InfoEsquina1.Height, Zbuffer, InfoEsquina1.Image_Width, InfoEsquina1.Height, 0, Blendop_Color, TempColor, Mirror_Horizontal, Filter_None, False)
        Call p_gfx.DRAW_MapEx(rEsquina1, MarcoD.X + MarcoD.Width - InfoEsquina1.Image_Width, MarcoD.Y + MarcoD.Height - InfoEsquina1.Height, Zbuffer, InfoEsquina1.Image_Width, InfoEsquina1.Height, 0, Blendop_Color, TempColor, Mirror_Both, Filter_None, False)
    End If
   
            'Dibujar bordes si corresponde
    If HayBordeH Then
        Call p_gfx.DRAW_MapEx(rBordeH, MarcoD.X + InfoEsquina1.Width, MarcoD.Y, Zbuffer, MarcoD.Width - 2 * InfoEsquina1.Width, InfoBordeH.Height, 0, Blendop_Color, TempColor, Mirror_None, Filter_None, False)
        Call p_gfx.DRAW_MapEx(rBordeH, MarcoD.X + InfoEsquina1.Width, MarcoD.Y + MarcoD.Height - InfoBordeH.Height, Zbuffer, MarcoD.Width - 2 * InfoEsquina1.Width, InfoBordeH.Height, 0, Blendop_Color, TempColor, Mirror_None, Filter_None, False)
    End If
   
    If HayBordeV Then
        Call p_gfx.DRAW_MapEx(rBordeV, MarcoD.X, MarcoD.Y + InfoEsquina1.Height, Zbuffer, InfoBordeV.Width, MarcoD.Height - 2 * InfoEsquina1.Height, 0, Blendop_Color, TempColor, Mirror_None, Filter_None, False)
        Call p_gfx.DRAW_MapEx(rBordeV, MarcoD.X + MarcoD.Width - InfoBordeV.Width, MarcoD.Y + InfoEsquina1.Height, Zbuffer, InfoBordeV.Width, MarcoD.Height - 2 * InfoEsquina1.Height, 0, Blendop_Color, TempColor, Mirror_None, Filter_None, False)
    End If

   
    'Dibujar texto
    LineasDraw = UBound(ListaDraw)
    If LineasDraw > MaxLineas Then LineasDraw = MaxLineas
    For i = 1 To LineasDraw
        Cadena = Cadena & ListaDraw(i + AscensorValor) & vbCrLf
    Next
    TempColor = p_gfx.ARGB_Set(AlphaActual, (FontColor And &HFF0000) / 65536, (FontColor And &HFF00&) / 256, (FontColor And &HFF))
    Call p_gfx.DRAW_Text(pFont, Cadena, MarcoTextoD.X, MarcoTextoD.Y, Zbuffer, TempColor, Align_Left)

   
    'dibujar ascensor si corresponde
    If DibujarAscensor Then
    TempColor = p_gfx.ARGB_Set(AlphaActual, (BorderColor And &HFF0000) / 65536, (BorderColor And &HFF00&) / 256, (BorderColor And &HFF))
    For i = 0 To 2
        Call p_gfx.DRAW_Box(AscensorD(i).X, AscensorD(i).Y, AscensorD(i).X + AscensorD(i).Width, AscensorD(i).Y + AscensorD(i).Height, Zbuffer, TempColor, False) 'dibujar borde
    Next
    Dim Posiy As Long
    Dim AltoY As Long
    Posiy = ((AscensorD(1).Height / (AscensorMax + 1)) * AscensorValor) + AscensorD(1).Y
    AltoY = (AscensorD(1).Height / (AscensorMax + 1))
    Call p_gfx.DRAW_Box(AscensorD(1).X + 2, Posiy, AscensorD(1).X + AscensorD(1).Width - 2, Posiy + AltoY, Zbuffer, TempColor, True, TempColor) 'dibujar valor
    End If
End If
End Sub

Public Sub AddItem(ByVal Linea As String)
Dim i, e, o As Integer
Dim Cadenas() As String

Cadenas = Split(Linea, vbCrLf) 'detectar y agregar multiples linea en un sólo llamado
For e = 0 To UBound(Cadenas)
    'Agregar nueva linea a la lista
    ReDim Preserve Lista(UBound(Lista) + 1)
    ReDim Preserve ListaDraw(UBound(ListaDraw) + 1)
   
    i = UBound(Lista)
    Lista(i) = Cadenas(e) 'asignar string a buffer interno
   
    'comprobar tamaño del string dibujado contra los margenes del control y almacenar el buffer para dibujo de fuente
    Do While p_gfx.FONT_SystemGetTextWidth(pFont, Cadenas(e)) >= MarcoTextoD.Width
        Cadenas(e) = Mid(Cadenas(e), 1, Len(Cadenas(e)) - 1)
    Loop
    ListaDraw(i) = Cadenas(e)
   
    If i > MaxLineas Then
        DibujarAscensor = True
        AscensorMax = i - MaxLineas
    End If
Next
End Sub

Public Sub Clear()

ReDim Lista(0)
ReDim ListaDraw(0)
DibujarAscensor = False

End Sub

Public Sub Input_()
Dim Left_click As Boolean

'si el ratón esta sobre el marco
If p_System.MATH_PointInRect(p_Input.Mouse.X, p_Input.Mouse.Y, MarcoD) Then

    'corregir opacidad actual si el cursor pasa encima del marco
    If UseTransparency2 = Msg_Only_Cursor Or UseTransparency2 = Msg_Focus_OR_Cursor Then AlphaActual = pOpacidadSec
   
    'Detectar foco
    If p_Input.Mouse.Left_Button Then
        pfoco = True
    End If
   
    If pfoco And (UseTransparency2 = Msg_Focus_OR_Cursor Or UseTransparency2 = Msg_Only_Focus) Then AlphaActual = pOpacidadSec
   
    'Detectar ascensor
    If DibujarAscensor Then
        If Left_Click_ant = False And p_Input.Mouse.Left_Button Then 'detectar mouse_press
            If p_System.MATH_PointInRect(p_Input.Mouse.X, p_Input.Mouse.Y, AscensorD(0)) Then AscensorValor = Saturar(AscensorValor - 1, 0, AscensorMax) 'si se preciona subir
            If p_System.MATH_PointInRect(p_Input.Mouse.X, p_Input.Mouse.Y, AscensorD(2)) Then AscensorValor = Saturar(AscensorValor + 1, 0, AscensorMax) 'si se preciona bajar
        End If
        If p_Input.Mouse.Left_Button And p_System.MATH_PointInRect(p_Input.Mouse.X, p_Input.Mouse.Y, AscensorD(1)) Then 'si se preciona el cuerpo del ascensor
            AscensorValor = ((p_Input.Mouse.Y - AscensorD(1).Y) / (AscensorD(1).Height / AscensorMax))
        End If
            'Llamar a función externa de click sólo si preciona sobre el área de texto
        If p_System.MATH_PointInRect(p_Input.Mouse.X, p_Input.Mouse.Y, MarcoTextoD) And p_Input.Mouse.Left_Button And Left_Click_ant = False Then
            RaiseEvent Click
        End If
    Else
        If p_System.MATH_PointInRect(p_Input.Mouse.X, p_Input.Mouse.Y, MarcoD) And p_Input.Mouse.Left_Button And Left_Click_ant = False Then
            RaiseEvent Click
        End If
   
    End If
   
    pCursorSobre = True
Else
    If (Not (UseTransparency2 = Msg_Focus_OR_Cursor Or UseTransparency2 = Msg_Only_Focus)) Or pfoco = False Then AlphaActual = pOpacidad
    'Detectar foco
    If (p_Input.Mouse.Left_Button Or p_Input.Mouse.Right_Button) And Left_Click_ant = False Then pfoco = False
    pCursorSobre = False
End If

'pasar último valor de left click del mouse
Left_Click_ant = p_Input.Mouse.Left_Button


'Detectar foco y cursor sobre el control
If pFocoPrevio = False And pfoco = True Then RaiseEvent GotFocus
If pFocoPrevio = True And pfoco = False Then RaiseEvent LostFocus
If pCursorSobrePrevio = False And pCursorSobre = True Then RaiseEvent GotCursor
If pCursorSobrePrevio = True And pCursorSobre = False Then RaiseEvent LostCursor

pFocoPrevio = pfoco
pCursorSobrePrevio = pCursorSobre
End Sub
#70
Proyecto dx_lib32 / Error con rotaciones
16 de Noviembre de 2008, 12:11:47 AM
Buenas Ex3. Me parece que he encontrado un nuevo error, aunque me gustaría tu opinión.

Tratando de colocarle imágenes para los bordes del control me tope con el siguiente problema:

Draw_MapEx(MapaBorde, PosX, PosY, Zbuffer, Borde.Width, Borde.height, 0, ....) <-- aquí todo bien
Draw_MapEx(MapaBorde, PosX, PosY, Zbuffer,Borde.Width, Borde.height + 100 , 0, ....) <-- acá todo funciona de maravilla, me dibuja el mapa en (PosX + PosY) y me lo alarga en 100 pixel

Draw_MapEx(MapaBorde, PosX, PosY, Zbuffer, Borde.Width, Borde.height, 90, ....) <-- aquí todo bien, me dibuja la imagen rotada 90 grados en la posición ()PosX, PosY)
Draw_MapEx(MapaBorde, PosX, PosY, Zbuffer, Borde.Width, Borde.height + 100, 90, ....)  <-- "Peligro, Will Robinson...", me rota la imagen, la ensancha +100 pixel y le CAMBIA la posición al eje X
#71
Proyecto dx_lib32 / ayuda predibujando texto
05 de Noviembre de 2008, 07:05:19 AM
Buenas.

Para cerrar mi proyecto estoy creando algunas clases para reemplazar algunos objetos de VB que utilice en su momento (cuando las tenga terminadas las posteare por si a alguien le sirven ), específicamente estoy creando una clase que reemplace al MesageBox y de paso sirva como una ListBox. Mi duda, surge a la hora de maximizar el rendimiento, pues la librería pierde rendimiento con los draw_text (en mi equipo no he tenido problema, pero no quiero poner rendimiento un intel core 2 duo para mostrar 10 línea seguidas de texto), así que pase muchos cálculos a una función que sólo se invoca cuando cambia el contenido del string a dibujar, pero quería saber si existe alguna forma de hacer lo mismo con el dibujo de los textos.

Había pensado en usar el buffer secundario, pero luego de leer la recomendación de José Miguel lo descarte de plano, pero me ha quedado dando vuelta el bichito a ver si es posible dibujar los textos en algún lugar y luego invocar esa imagen de forma cíclica ahorrando esos valiosos draw_text.
#72
General / Licencias
01 de Noviembre de 2008, 07:46:34 AM
Imagino que todo el mundo (o por lo menos la mayoría) conoce el juego WOW (Word of warcraft), hoy por casualidad he visto que puedes descargar una versión demo de 10 días, así que decidí probarlo, el primer paso, registrar la cuenta y aquí es donde viene mi gran sorpresa, la condición que exige blizzard a sus jugadores para poder registrar una cuenta:
Citar
En un intento por brindar a todos los usuarios la oportunidad de jugar a World of Warcraft en un entorno sin trucos, recuerda que World of Warcraft controla el ordenador que utilizas para acceder al juego en busca de programas de terceras partes no autorizadas que utilice junto a World of Warcraft realizando análisis limitados de tu sistema.
Al hacer clic en la casilla Acepto, reconoces y aceptas que Blizzard tiene derecho a realizar este análisis. Si no permites que Blizzard realice este análisis en tu ordenador, no podrás registrar una cuenta para jugar en World of Warcraft.

y he aquí el meollo del tema que deseo plantear. ¿Que les parece una condición de este tipo en un juego?.

PD: Fijaos que estoy abriendo un tema para debatir vuestras opiniones respecto a este tema.

#73
Proyecto dx_lib32 / Error con Sound_Play en 2.2
10 de Octubre de 2008, 05:48:28 AM
Buenas nuevamente, de seguro que a estas alturas ya me odias  0:-)

Cerrando mi proyecto me decidí a darle algunos efectos de sonido y me acabo de encontrar con un error, al utilizar Sound_Play, de partida no reproduce nada y me devuelve un valor astronómico (2 mill millones y fracción), he probado el mismo código pero con la librería 2.1 y esta si funciona (devuelve 0 y se escucha el sonido.)
#74
Proyecto dx_lib32 / problema con Blit_Mirror
17 de Septiembre de 2008, 11:36:34 AM
Buenas nuevamente.

En la programación del juego tengo las siguientes lineas que me dibujan una nave (un png), dependiendo de la dirección de la misma, es que la dibujo de forma normal o con mirror horizontal, sin embargo ahora que pase a la versión 2.2, el mismo código no me dibuja nada si en la función "DRAW_AdvMap" utilizo el valor "Mirror_Horizontal", o sea, si dibujo de forma directa no tengo problema, pero al tratar de utilizar el mirror el dibujo simplemente desaparece.

Citar
....
FrmFlota = m_gfx.MAP_Load(App.Path & "\Recursos\naves.png", &HFFFF00FF)
....
....
....
Dim Espejo As Blit_Mirror

For i = 0 To 1024
    If Flotas(i, 0) = 1 Then 'Buscar solo flotas que pertenezcan al jugador
    'Determinar coordenas para dibujo de recorrido
        PosInicialX = 36 + Planeta(Flotas(i, 5), 4) * 32
        PosInicialY = 86 + Planeta(Flotas(i, 5), 5) * 32
        PosFinalX = 36 + Planeta(Flotas(i, 1), 4) * 32
        PosFinalY = 86 + Planeta(Flotas(i, 1), 5) * 32
    'Dibujar recorrido de la flota
        Call m_gfx.DRAW_Line(PosInicialX - 1, PosInicialY, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 70, 20, 200))
        Call m_gfx.DRAW_Line(PosInicialX + 1, PosInicialY, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 70, 20, 200))
        Call m_gfx.DRAW_Line(PosInicialX, PosInicialY - 1, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 70, 20, 200))
        Call m_gfx.DRAW_Line(PosInicialX, PosInicialY + 1, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 70, 20, 200))
        Call m_gfx.DRAW_Line(PosInicialX, PosInicialY, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 87, 226, 33))
   
    'Posicionar y dibujar Flota
        DeltaFlota = Flotas(i, 4) - Flotas(i, 6)
        PosFlotaX = PosInicialX - 16 + ((PosFinalX - PosInicialX) / DeltaFlota) * ((NumTurno - Flotas(i, 6)) + 0.5)
        PosFlotaY = PosInicialY - 16 + ((PosFinalY - PosInicialY) / DeltaFlota) * ((NumTurno - Flotas(i, 6)) + 0.5)
       
        Espejo = Mirror_None 'Iniciar espejo para flota que va a la izquierda
        If PosFinalX - PosInicialX > 0 Then Espejo = Mirror_Horizontal 'Determinar si flota va a la derecha
        Call m_gfx.DRAW_AdvMap(FrmFlota, PosFlotaX, PosFlotaY, -1, 0, 0, Blendop_Color, &HFFFFFFFF, Espejo, Filter_None, 0)

....

¿alguna idea?, porque le he estado dando vueltas al asunto pero no lo veo el problema.
#75
Proyecto dx_lib32 / Problema con Key_Press en 2.2
17 de Septiembre de 2008, 10:45:15 AM
Buenas Ex3.
Apenas publicaste la última versión decidí descargarla y probarla, para mi sorpresa tuve bastantes cambios en la parte de direct input entre la versión que utilizaba y la actual, pero lo que más me llamo la atención fue que la función key_press muto de alguna extraña forma.

Según la documentación y por lo que recuerdo, Key_Press "Devuelve el código de la tecla que esta siendo presionada en el teclado"
Sin embargo si en un bucle agrego la línea
text1 = m_input.Key_Press

y mantengo presionada cualquier tecla, text1 toma valor "0" y a veces pestañea, como intentando tomar otro valor. Probe con el siguiente código:
if m_input.Key_Press <> 0 then text1 = m_input.Key_Press

y en ese caso cuando presiono una tecla efectivamente me muestra el valor de la misma, pero sólo durante un breve periodo de tiempo y no de forma continúa como lo hacia antiguamente.

No se si esto es un cambio en la librería no reflejado en la documentación, un error en la iberia o es que yo ando perdido, así que si me puedes ayudar a aclararme te lo agradecería.

PD: Probando con vb6 bajo windows XP SP3

PD2: También he probado con Key_Hit, pero al colocar la subrutina de captura dentro del ciclo principal del juego y al presionar una tecla con Key_Hit, esta me marca entre 2 y 4 pulsaciones cuando solamente he presionado la tecla una única vez. Tuve que sacar la rutina del ciclo principal y colocarla en paralelo con un timer cada 2 milisegundos para que Key_Hit me entregue una única señal con el flanco de subida de la tecla.
#76
Proyectos / Konquista
10 de Noviembre de 2007, 11:09:19 PM
Buenas.

Les dejo este proyecto de un clon del juego Konquest para KDE. El proyecto se me ocurrió más que nada para aprender a utilizar la libreria DX_lib32 de Ex3, así que tome uno de mis minijuego favorito y empecé a trabajar.

Para los que no conozcan el juego les dejo el enlace a la explicación del juego original:
http://en.wikipedia.org/wiki/Konquest

El proyecto aunque esta aun en fase Beta, esta 100% jugable, así que espero lo disfruten y aunque se que no es el gran juego, espero que sirva para matar el rato de vez en cuando. Cualquier problema que pudieran tener les agradecería que lo coloquen acá o lo envíen a mi mail para poder sacar una versión final.


Descarga:
http://www.badongo.com/file/5087437


imagenes
Aca esta el modo menú para personalizar las propiedades del juego.


Y ahora una imagen del tablero de juego:


PD: El juego esta creado en VB y si deseán ver el desordenado código fuente, el enlace esta en el subforo de la libreria DX_lib32.
#77
Proyecto dx_lib32 / Ayuda para empaquetar Recursos
10 de Noviembre de 2007, 10:30:03 PM
Saludos estimada comunidad de DX_Lib32

Quisiera saber si alguien tiene algún ejemplo o si me puediese orientar para utilizar recursos comprimidos (especialmente de imagenes).

Descargue la utilidad PakScape de la página de Lib32 y aunque puedo crear archivos con las imagenes, no se como las puedo utilizar desde ahí con mi aplicación.

Cualquier ayuda será bienvenida.
#78
Proyecto dx_lib32 / Clonico de Konquest
30 de Agosto de 2007, 04:48:50 AM
Este es mi primir proyecto con la libreria de EX3, de hecho es un proyecto que inicie para ir aprendiendo a usar la libreria.

El juego es un clonico del juego Konquest para KDE, programado en VB con la libreria dx_lib32.DLL de EX3.
Aca hay un enlace al juego original para que tengan una idea:
http://en.wikipedia.org/wiki/Konquest

Actualmente el juego tiene el modo Menú para personalizar y aceptar el mapa del universo a jugar y el mapa de juego propiamente tal. Para subir el código de la versión beta deseo tener lista la IA y resolver algunos detalles en desarrollo de los turnos, pero creo que dentro de los proximos días estara listo para que lo puedan probar y dar sus opiniones.
Por mientras les dejo 2 capturas de pantallas de lo que tengo funcionando:


Aca esta el modo menú para personalizar las propiedades del juego. (debo admitir que he hecho trampa, ya que los controloes deslizantes son 2 HScrollBar de VB)


Y ahora una imagen del tablero de juego:
#79
Buenas. Actualemente estoy haciendo un clon del juego Konquest para aprender a utilizar la libreria.
La descripción del juego original la encuentran aca
http://en.wikipedia.org/wiki/Konquest

Dentro del juego utilizo una grilla de 16*16 cuadros y cada cuadro es de 32*32 pixel.
Tengo una procedimiento que dibuja la grilla
Luego hice un procedimiento para capturar la posición del mouse usando  input.mouse.x e .y.

Si tengo visible un menú en VB con las opciones del juego, ocurre que la posición del mouse no coincide con el dibujo de la grilla usando el metodo DRAWline.

El inicio de la grilla en el eje Y, lo dibujo a los 70 pixel y al revisar la coordenada del mouse me marca 65.
El fin de la grilla en el eje Y, lo dibujo a los 600 pixel y al revisar la coordenada del mouse me marca 575.

Lo raro es que si elimino el menú, la situación se arregla y la posición del mouse me concuerda 100% con la posición del dibujo. Pense que al agregarse el menú significaría un corrimiento en los pixel del dibujo o de la captura del mouse, el problema es que este corrimiento no es constante, ya que al inicio es de +5 pixel y cerca del final de la pantalla es de +25 pixel.
No se si sera un error de la libreria o si debo hacer algo para compensar el uso del menú (de momento me estoy olvidando de usar el menú)

PD: Alguien sabe donde poder subir el proyecto para compartilo y que no sea muy atadoso (registros limitados a descargar controles y cosas por el estilo)





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.