Hola, estoy haciendo un juego en c++ con allegro4 (no se lo suficiente de programación, pero así aprendo).
Estoy teniendo un problema al intentar mejorar una parte del codigo que pretendo que haga que el personaje del juego se mueve hacia donde hago clic con el raton en linea recta a velocidad constante.
Las variables posx y posy son la posicion actual del personaje en la pantalla, derx y dery almacenan las coordenadas del ultimo clic y la variable velocidad es la velocidad del personaje(cuanto menor sea la velocidad mas rapido irá).
Codigo antiguo:
Con este codigo como podeis ver el recorrido del personaje no es el adecuado. Primero se mueve trazando un angulo de 45º y una vez que una de las coordenadas ha llegado se desplaza en la otra. =S no se como explicarlo pero creo que se entiende con el codigo.
Otro de los problemas de este codigo es que la velocidad con la que se mueve no es continua.
Por ello escribi este otro codigo:
Hasta ahi bien, el problema es que al ejecutarlo el programa deja de responder.
Me podeis echar una mano??
Gracias, MasterPunk
Estoy teniendo un problema al intentar mejorar una parte del codigo que pretendo que haga que el personaje del juego se mueve hacia donde hago clic con el raton en linea recta a velocidad constante.
Las variables posx y posy son la posicion actual del personaje en la pantalla, derx y dery almacenan las coordenadas del ultimo clic y la variable velocidad es la velocidad del personaje(cuanto menor sea la velocidad mas rapido irá).
Codigo antiguo:
Código (cpp) [Seleccionar]
while(...){
contador++;
if( derx!=0 && contador % velocidad == 0) //en x
if(posx!=derx)
if(posx<derx)
posx+= 1;
else
posx-= 1;
if( dery!=0 && contador % velocidad == 0) //en y
if(posy!=dery)
if(posy<dery)
posy+= 1;
else
posy-= 1;
}
Con este codigo como podeis ver el recorrido del personaje no es el adecuado. Primero se mueve trazando un angulo de 45º y una vez que una de las coordenadas ha llegado se desplaza en la otra. =S no se como explicarlo pero creo que se entiende con el codigo.
Otro de los problemas de este codigo es que la velocidad con la que se mueve no es continua.
Por ello escribi este otro codigo:
Código (cpp) [Seleccionar]
distanciax = derx - posx;
distanciay = dery - posy;
float distancia = distanciax/distanciay;
if( derx!=0 && contador % (velocidad*(int)distancia) == 0) //en x
if(posx!=derx)
posx += (int)distancia;
if(dery!=0 && contador % velocidad == 0) //en y
if(posy!=dery)
if(posy<dery)
posy+= 1;
else
posy-= 1;
Hasta ahi bien, el problema es que al ejecutarlo el programa deja de responder.
Me podeis echar una mano??
Gracias, MasterPunk