Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ayuda Movimiento

Iniciado por Ezequielk, 17 de Diciembre de 2010, 07:30:56 PM

« anterior - próximo »

Ezequielk

Otra dudita.
Tienen idea de por que no se ven los labels, shapes, lines y otros componentes?
Cuando empieza el "Do While" todos los label, shapes, lines titilan o driectamente ni aparecen en el formulario, ¿alguien sabe por que pasa esto y como arreglarlo?

[EX3]

Sencillamente no se puede. Direct3D, la API sobre la que se basa la clase grafica de dx_lib32, genera una capa donde representa las operaciones gráficas y estas siempre se pintan sobre el contenido del formulario que aloja la instancia del contexto gráfico de DirectX. En definitiva, no puedes usar controles de Windows y Direct3D a la vez.

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

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

Ezequielk

Una pregunta mas.
Hechelion tenes idea por qué cuando dibujo esta imagen en pantalla (con animacion.Draw) se ve medio borrosa???
http://img192.imageshack.us/i/abajo1.png/
Osea, cuando la dibujo en la pantalla no se ve muy nitida que digamos :S

Hechelion

El problema se debe a un suavizado que aplica la librería cuando redimensiona la imagen.

En la GPU las imágenes deben potencias de dos (64*64,128*128, 256*256, etc), cuando a la librería le pedimos que cargue una imagen de tamaño que no sea potencia de dos, como por ejemplo la que tienes tú (creo que es de 33*65) la librería la redimensiona a la potencia de dos más cercana y a al hacerlo le aplica un suavizado y por eso se ve borrosa.

La solución es usar imágenes que sean potencia de dos, cambia el tamaño del lienzo de tu imagen a 64*64 y vas a ver que ya no se verá borrosa.

PD: Por cierto, el suavizado lo aplica la librería cuando cargas la imagen y no tiene nada que ver con mi clase, si cargas la imagen directo, veras que también se vera borrosa producto del suavizado.

Ezequielk

Si hago una imagen de 32*64 ¿se veria nitido?(las 2 son potencias de 2) porque sino se me hace dificil dibujar a un tipo en un cuadrado de 64*64

[EX3]

Si, no hace falta que las imágenes sean cuadradas a la fuerza, solo que sus dimensiones sean potencia de 2. 32x64 es valido al igual que 128x1024.

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

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

Ezequielk

Hechelion, tengo una animacion creada con tu clase, que consta de 4 imagenes, el problema es que las muestra muy rapido, como hago para controlar la velocidad en la que se muestra cada imagen??? tendria que mostrar cada imagen durante 15 ciclos.

Hechelion

Cita de: Ezequielk en 24 de Diciembre de 2010, 07:16:42 PM
Hechelion, tengo una animacion creada con tu clase, que consta de 4 imagenes, el problema es que las muestra muy rapido, como hago para controlar la velocidad en la que se muestra cada imagen??? tendria que mostrar cada imagen durante 15 ciclos.

Si estás editando con el programa, en la pantalla de animación  hay un cuadrado que dice "Repertir" y tiene valor 1, eso significa que se va a repetir 1 ciclo antes de pasar al siguiente cuadro.
Ahí puedes definir cuando quieres que demore cada frame de la animación.


O puedes editar el archivo de texto plano
Cada línea es un paso de la animación, el cuarto valor es la cantidad de ciclos que debe durar .
mina_000,0,0,10,0,0,0,0,0,0,0,0

Ezequielk

Muchisimas gracias :D
Ya me estaba volviendo loco jaja
Saludos

Ezequielk

Hola de nuevo, estube unos días sin tocar el vb debido a las fiestas :P
Vengo con otra duda, esta es con respecto a la clase de Hechelion.
Tengo una animacion que tiene esos "cuadrados" que se crean con el programa que hace las animaciones (el que hizo Hechilon). Yo quiero que cuando se pase el mouse por el "personaje" pase algo, no importa qué (bah si quieren saberlo, tendria que mostrar el nombre del personaje justo abajo de éste). Supongo que tendria que usar los cuadrados que cree junto con la animacion pero no se como usarlos. ¿Se tendria que usar el .GetRect()? ¿Cómo lo uso? ¿Cómo identifico la colision?

Desde ya,
Muchas Gracias,
Ezequielk

P/D: Perdon por el doble post  :-[

avalontm

Cita de: Ezequielk en 04 de Enero de 2011, 10:46:03 PM
Hola de nuevo, estube unos días sin tocar el vb debido a las fiestas :P
Vengo con otra duda, esta es con respecto a la clase de Hechelion.
Tengo una animacion que tiene esos "cuadrados" que se crean con el programa que hace las animaciones (el que hizo Hechilon). Yo quiero que cuando se pase el mouse por el "personaje" pase algo, no importa qué (bah si quieren saberlo, tendria que mostrar el nombre del personaje justo abajo de éste). Supongo que tendria que usar los cuadrados que cree junto con la animacion pero no se como usarlos. ¿Se tendria que usar el .GetRect()? ¿Cómo lo uso? ¿Cómo identifico la colision?

Desde ya,
Muchas Gracias,
Ezequielk

P/D: Perdon por el doble post  :-[


Código (vb) [Seleccionar]

Halgo asi seria

'Cargar Collision del Player
        CharList(CharIndex).Shape.X = CharList(CharIndex).Pos.X + Player(CharIndex).GetRect(0).X    'Posicion X
        CharList(CharIndex).Shape.Y = CharList(CharIndex).Pos.Y + Player(CharIndex).GetRect(0).Y    'Posicion Y
        CharList(CharIndex).Shape.Width = Player(CharIndex).GetRect(0).Width                         'Ancho
        CharList(CharIndex).Shape.Height = Player(CharIndex).GetRect(0).Height                       'Alto
       


La collison quedaria como la imagen


Hechelion

Voy a agregar una cosas extra a la explicación de Avalontm.

Tal como te dice, si definiste algunos rectángulos a las animaciones, puedes usar la función GetRect para implementar colisiones, acabo de actualizar las clases debido a un error con esa función, así que te recomiendo volver a bajarla y actualizar la clase en tu proyecto.

Si tienes definido los rectángulos para la animación, la forma más simple de hacer una colisión con el mouse es usar la función MATH_PointInRect de la clase System de la librería, la cual nos devuelve TRUE si un punto está dentro de un cuadrado y false si no.
El punto será el mouse y el cuadrado lo podemos sacar directo de la clase de animación, en la actualización incluyo un ejemplo de esto, si colocas el mouse sobre el Ovni superior, va a salir un texto que dice "Colisión"

System.MATH_PointInRect(m_Input.Mouse.X, m_Input.Mouse.Y, Animacion.GetRect(0))

Ezequielk

No se por qué, pero no me anda, este es el codigo:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
   If m_System.MATH_PointInRect(CLng(X), CLng(Y), Personaje.GetRect(0)) = True Then
       MsgBox "Andó", vbInformation, "Mensaje"
   End If
End Sub


Osea cuando paso el mouse por la animación no tira el cartel :S
Alguien sabe por qué?

PD: Ya me baje la nueva clase

avalontm

Cita de: Ezequielk en 05 de Enero de 2011, 12:57:40 AM
No se por qué, pero no me anda, este es el codigo:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
   If m_System.MATH_PointInRect(CLng(X), CLng(Y), Personaje.GetRect(0)) = True Then
       MsgBox "Andó", vbInformation, "Mensaje"
   End If
End Sub


Osea cuando paso el mouse por la animación no tira el cartel :S
Alguien sabe por qué?

PD: Ya me baje la nueva clase


alli me imagino que si esta el mouse dentro de la collision del personaje  aparece el mensaje pero se debe de agregar la posicion de l personaje + la pos de la collision para ke deva de funcionar correctamentre

Hechelion

#29
Primero, no uses la posición del mouse de VB, si no tienes configurado el Form, el mouse de VB te entrega valores en Twip, mientras que la clase trabaja con Pixel por lo cual el área de colisión jamas va a coincidir con la animación. Usa la clase Input de la librería Dx_lib32, es mejor que cambiar la propiedad de VB a pixel.

Junto con la clase va el ejemplo del ovni, el cual usa la clase input para mostrar un mensaje cuando pasas el mouse por encima, te recomiendo que la uses como referencia, cualquier duda avisa. (Fiajte que la colisión está dentro del bucle del juego)

Avalontm, sobre la posición del PJ, no es necesario indicar nada, cuando usas el Draw de la animación, de forma automática los rectángulos de la animación se ajustan a la posición de dibujo  (Esa fue la actualización que hice)  ;)






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.