IIC2233 / Syllabus-2017-1

Repositorio oficial del curso IIC2233 Programación Avanzada
https://iic2233.github.io/
16 stars 32 forks source link

Fluidez de Movimiento #549

Closed KnowYourselves closed 7 years ago

KnowYourselves commented 7 years ago

Una consulta pequeña!, En mi programa en el momento en que el usuario apreta una tecla de movimiento (W, A, S, D) hay un pequeño delay de aprox 0.5 segs donde el personaje no se mueve y luego comienza con su movimiento. Cuales podrían ser las posibles causas de esto?, Un problema de modelamiento?, he intentado de varias maneras eliminar este delay pero no he tenido suerte.

De antemano, gracias!

hanavarrete commented 7 years ago

Como estás manejando el movimiento? Similar al ejemplo que subimos o de otra forma?

El 30-05-2017, a las 14:00, KnowYourselves notifications@github.com escribió:

Una consulta pequeña!, En mi programa en el momento en que el usuario apreta una tecla de movimiento (W, A, S, D) hay un pequeño delay de aprox 0.5 segs donde el personaje no se mueve y luego comienza con su movimiento. Cuales podrían ser las posibles causas de esto?, Un problema de modelamiento?, he intentado de varias maneras eliminar este delay pero no he tenido suerte.

De antemano, gracias!

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

KnowYourselves commented 7 years ago

Desde MainWindow recibo el keyPressEvent, el cual llama a la funcion Move(mouse, dirección) de mi campeon (creada por mi, no la de QLabel) Y a nivel de la clase campeón hago todo el calculo vectorial y muevo el label de la misma manera que en el ejemplo. (a diferencia que en vez de hacerlo con una señal en mainwindow lo hago directamente desde el position.setter)

Hernan4444 commented 7 years ago

@KnowYourselves cuando llamas a la funcion Move(mouse, dirección) ¿lo haces con señales o mediante métodos?? la misma pregunta va cuando haces el setter, ¿el emit de la señal está en el setter o haces move?

Saludos

hanavarrete commented 7 years ago

Mueves el label desde dentro de tu clase campeón en el setter? Si es así intenta hacer la señal con la mainwindow. Para mi t05 tenía el mismo problema y la manera en la que el movimiento era más rápido (o sin lag) era mediante el envío de la señal a la mainwindow. Trata eso y dime como te va!

El 30-05-2017, a las 14:23, KnowYourselves notifications@github.com escribió:

Desde MainWindow recibo el keyPressEvent, el cual llama a la funcion Move(mouse, dirección) de mi campeon (creada por mi, no la de QLabel) Y a nivel de la clase campeón hago todo el calculo vectorial y muevo el label de la misma manera que en el ejemplo. (a diferencia que en vez de hacerlo con una señal en mainwindow lo hago directamente desde el position.setter)

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

KnowYourselves commented 7 years ago

@Hernan4444 Mi campeon es de la clase Unit, la cual tiene el método Move, cuando se apreta la tecla se llama a ese move, dentro del cual se hace el move del QLabel a nivel del setter.

@hanavarrete Cambie mediante señales el move a MainWindow pero aún así tiene el mismo lag 😢

Hernan4444 commented 7 years ago

@KnowYourselves te recomiendo que llames al metodo Move mediante señales y no de forma directa. Trata eso y me cuentas!!

Saludos

KnowYourselves commented 7 years ago

Ya intente llamar al metodo move del QLabel mediante señales y no hubo cambio 😢

rrhurtado commented 7 years ago

Hola ! Podrías intentar ver si el delay existe cuando el movimiento es fijo y sin lógica de por medio (ejemplo +20 pixeles a la derecha para D, independiente de la posición del mouse). Veo poco probable que sea el cálculo vectorial el causante, pero no se pierde nada con probar.

Saludos

KnowYourselves commented 7 years ago

@rrhurtado Intente mover la imaen directamente como lo describes, pero aún así hay ese delay 🤔 no se que podría ser

iqacevedo commented 7 years ago

@KnowYourselves tu campeón (controlado por ti) es un Thread? Si es así ¿no utilizas sleep entremedio que ocasionen esto?. Si es un Thread, intenta probar haciendo que no lo sea (solo el que controlas tu).

Saludos !