Anuncios Google

Ayuda al dibujar imagenes

Hola a todos!!!!!!

 

Vuelvo de nuevo a vosotros con una duda mas, pero por mas que lo intento no consigo solucionarlo y no se que falla.

Veamos, lo primero de todo es decir que estoy haciendo, bueno, resumiendolo mucho es un juego de futbol y como tal juego los jugadores se mueven, se que esto una perogrullada pero tenia que decirlo. Mi problema viene cuando muevo las imagenes en diagonal, ya que cuando estas llegan al final del movimiento es vez de pararse lo que hacen es entrar "modo tembleque", vamos, que no se quedan quietas y no paran de vibrar, quedando el juego bastante feo, pero lo mas gracioso es que cuando se mueven en linea recta si se quedan quietas al terminar el movimiento.

Esto lo achaco yo al calculo de las diagonales con las funciones trigonometricas que como todos sabemos no son numeros exactos y de ahi que de la casualidad que a veces no se alcancen los valores finales del movimiento pero tambien es cierto que para eso usamos funciones como math.floor y math.ceil. El caso es que no se como solucionarlo y ya estoy algo desesperado.

 

Estoy seguro que mas de uno aqui sabra decirme algo, y si no es asi, al menos se que se ha molestado en leerme y eso ya es bastante. Gracias por anticipado a todos los que respondais!!!!!!!

Saludos!!!!!!!!!

 

Aqui pongo mi codigo:

function mover(player, destinoX, destinoY)
origenX = player.x --posicion Xdel jugador a mover
origenY = player.y --posicion Y del jugador a mover
x1 = destinoX --hacia donde queremos ir
y1 = destinoY --hacia donde queremos ir
if player.velocidad == 0 then
player.velocidad = 1/4
end
dx = math.abs(origenX - x1)
dy = math.abs(origenY - y1)
ang_jugador = math.atan(dy/dx)
if origenX > x1 and origenY > y1 then --estamos moviendonos a la izquierda y arriba
player.x = player.x - math.ceil((player.velocidad * math.cos(ang_jugador)))
player.y = player.y - math.ceil((player.velocidad * math.sin(ang_jugador)))
elseif origenX > x1 and origenY < y1 then --estamos moviendonos a la izquierda y abajo
player.x = player.x - math.ceil((player.velocidad * math.cos(ang_jugador)))
player.y = player.y + math.ceil((player.velocidad * math.sin(ang_jugador)))
elseif origenX < x1 and origenY > y1 then --estamos moviendonos a la derecha y arriba
player.x = player.x + math.ceil((player.velocidad * math.cos(ang_jugador)))
player.y = player.y - math.ceil((player.velocidad * math.sin(ang_jugador)))
elseif origenX < x1 and origenY < y1 then --estamos moviendonos a la derecha y abajo
player.x = player.x + math.ceil((player.velocidad * math.cos(ang_jugador)))
player.y = player.y + math.ceil((player.velocidad * math.sin(ang_jugador)))
elseif origenX == x1 and origenY > y1 then --estamos moviendonos arriba
player.x = player.x
player.y = player.y - math.ceil((player.velocidad * math.sin(ang_jugador)))
elseif origenX == x1 and origenY < y1 then --estamos moviendonos abajo
player.x = player.x
player.y = player.y + math.ceil((player.velocidad * math.sin(ang_jugador)))
elseif origenX > x1 and origenY == y1 then --estamos moviendonos a la izquierda
player.x = player.x - math.ceil((player.velocidad * math.cos(ang_jugador)))
player.y = player.y
elseif origenX < x1 and origenY == y1 then --estamos moviendonos a la derecha
player.x = player.x + math.ceil((player.velocidad * math.cos(ang_jugador)))
player.y = player.y
end
end


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de pucelano

Tras mirar el codigo que has

Tras mirar el codigo que has enviado no logro adivinar donde puede estar el fallo.

Creo que no es necesario "redondear" las coordenadas con math.floor o math.ceiling.

Si no te he entendido mal, mientras se mueve el jugador no se produce ese "parpadeo". Sino unicamente despues de parar tras un movimiento en diagonal.

Si el personaje tienes sprites, es decir, no es una imagen estática sino una serie de imagenes que den la sensación de que el jugador corre, puede que venga de ahí el fallo.

Pon en la pantalla de juego( de forma temporal por supuesto) todas las variables del jugador, para tratar de detectar el fallo, por si alguna toma un valor no previsto. Si es necesario pon un temporizador para ralentizar el movimiento y que te de tiempo a ver el valor de esas variables.

Ya nos dirás si lo consigues solucionar.

Saludos


Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.

Imagen de Daggoth

Hola qiyo!!!!!   No son

Hola qiyo!!!!!

 

No son imganes dinamicas, sino estaticas, es mas, son circulitos vistos en vista pajaro, desde arrib para entendernos.

Ya hice lo de las variables en la pantalla y el problema venia en la variable X del jugador que si por ejemplo el movimiento era hasta x=320 y=220, laX valia o 319 o 322 pero nunca llegaba a 320 y de ahi el parpadeo, y aun sigo sin saber porque.

He intentao controlarlo con variables del tipo si el movimiento==true (aun no hemos llegao), que dibuje y si alcanzamos las unidades de llegada que movimiento==false, pero el codigo es demasiado complejo en ese caso porque necesita mas de una variable para controlar mil casos diferentes que se pueden dar.

 

 

No se que hacer mas, voy a intentar varias cosas mas y te digo qiyo.

Gracias por responder y enhorabuena por tu segundo puesto en el concurso de NeoFlash!!!!!!!!

Nos vemos crack!!!!!!!!!! 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.