Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema con SetRegion

Iniciado por Hechelion, 15 de Noviembre de 2010, 02:42:43 AM

« anterior - próximo »

Hechelion

Buenas, nuevamente vuelvo con los problemas raros, está vez con el SetRegion.

¿Cuando se usa el SetRegion se redimenciona la imagen?



Mejor te comento el problema, estaba implementando un marcador de vida y energía, para lo cual estoy usando el SetRegion (pasé todo el día tratando de resolver el problema y en estos momento me doy cuenta que el problema está en la librería y no en mi código) para generar el medidor hago lo siguiente:

Tengo una imagen con los 2 estados de los medidores (uno para vacío y otro para lleno) y usando SetRegion compongo el medidor como muestra la imagen (Esto es la teoría):



El problema, es que a diferentes valores para el SetRegion se me deforma la imagen, como si la librería hiciera adaptaciones del tamaño de la imagen, no es la primera vez que veo algo parecido en mis proyectos, mi editor de mapa de tiles tiene un problema similar, pero pensaba  que era un error de código mio, pero como te decía, me dí cuenta que no es un error en mi código:

Para componer el medidor uso el siguiente código:

'dibujar porcentaje de vida
       auxAlto = 85 - Int(((pPJ.HP * 85) / pPJ.MaxHP))

'medidor vacío
       AuxImg.X = 0
       AuxImg.Y = 0
       AuxImg.Width = 72
       AuxImg.Height = 13 + auxAlto
       pGFX.MAP_SetRegion(imgMarcadores, AuxImg)
       pGFX.DRAW_Map(imgMarcadores, 5, 5, -7, 0, 0)

'medidor lleno
       AuxImg.X = 0
       AuxImg.Y = 14 + auxAlto
       AuxImg.Width = 72
       AuxImg.Height = 119 - (13 + auxAlto)
       pGFX.MAP_SetRegion(imgMarcadores, AuxImg)
       pGFX.DRAW_Map(imgMarcadores, 5, (14 + auxAlto), -7, 0, 0)


Por qué creo que el problema es de la librería, si te fijas, el primer SetRegion, siempre parte en (0,0) y siempre se dibuja en (5,5), es constante, lo único que cambia es el alto del rectángulo, sin embargo, a diferentes tamaños la imagen dibujada se cambia ligeramente de sitio, mira las siguientes capturas de pantalla:



Si la amplificas, se nota que el reloj se desplazó un pixel hacia la derecha, siendo que por código no toco nada en el eje X, y aunque en la imagen no se note mucho, cuando el juego está corriendo es bastante molesto ver como ese reloj salta a medida que se llena. (Salta en la medida que cambia el valor de Alto del SetRegion).


PD: Al final del Draw_Map tengo los valores de ancho y alto en 0, pero también probé colocando valores.

PD2: Por cierto, el tamaño original de la imagen es de 512*512

[EX3]

Si, este problema lo he sufrido incontables veces, incluidas en la ultima implementación del TLSA Engine (me dio mucha guerra esto a la hora de definir los fotogramas de la animación del sprite que tengo de avatar por ejemplo). Nunca he tenido claro el por que pero tiene que ver el como se tratan las coordenadas de textura a la hora de acotar regiones en Direct3D, algo tengo mal en ese código que nunca supe exactamente el que (también es de las primeras implementaciones de la librería de entonces cuando no dominaba bien Direct3D). Antes pasaba inclusive a la hora de aplicar los espejados, que se desplazaban incorrectamente las coordenadas de la textura reflejando una ligera porción de un extremo en el contrario por ejemplo, similar a este error.

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.