no se ni como comprobar el color de los pixeles ni como pintar solo algunos pixeles, asi que si me dices como me harias un segundo gran favor
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menúpublic static int numJugadores(){ //devuelve el numero de jugadores (1 o 2)
int k;
while(1){
k = SimpleIO.readInt(); //esto lee un entero introducido
if(k == 1 || k == 2){
return k;
}
else{
System.out.println("ERROR, vuelva a introducir el numero de jugadores");
}
}
}
Cita de: Kherom en 11 Enero 2012, 01:07 AM
Si haces el cast a int a manofunción( (int)numeroflotante )
evitarás los warnings, ya que para lo único que sirven en éste caso es para indicar una posible pérdida de precisión, que es justamente lo que andas buscando.
De todas formas ahora que me fijo, para que tengas tantos warnings, ¿Llamas a la función una vez por píxel A MANO? xD
void putpixel(BITMAP *bmp, int x, int y, int color); //si, dibujo al personaje en pantalla pixel a pixel... :rolleyes:
float velocidad = 0.2;
posx += (int)velocidad;
Cita de: SirLanceCC en 8 Enero 2012, 17:53 PM
Nada de módulos ni cosenos, necesitas trabajar un poco más con vectores.
Tienes la posición de tu personaje en un vector P, y donde haces clic en otro vector D.
Para obtener un vector que vaya de P a D, resta D - P.
Ahora tienes un vector de un tamaño que puede ser cualquiera, para adaptarlo a tus necesidades lo conviertes en vector unitario, lo multiplicas por la velocidad deseada y le llamas V.
Para avanzar sumamos P += V.
Ahora bien, para calcular el vector unitario se divide X y Y entre la longitud del vector y si el vector mide cero estamos en las mismas (fuuuuuu!!!). Para arreglar eso definimos so un vector mide cero su vector unitario es (0,0). Cuando multipliques por la velocidad seguirá siendo (0,0) y cuando actualices P no cambiará su valor, pero de todos modos habrás llegado a tu destino.
Espero que sea de ayuda.
double tangente;
if(posx != derx)
tangente = dery - posy/derx - posx;
else
tangente = 10; //un valor maximo
double angulo = atan(tangente);
if(contador % velocidad_bacteria == 0){ //para que no se mueva demasiado rapido
posx += (int)(sin(angulo)*5);
posy += (int)(cos(angulo)*5);}
Cita de: SirLanceCC en 8 Enero 2012, 11:12 AMdistanciax = derx - posx;
distanciay = dery - posy;
float distancia = distanciax/distanciay;
Si dery y posy son iguales, al calcular distancia se produce una división entre cero y el programa termina.
Cita de: Kherom en 8 Enero 2012, 16:37 PM
Lo que yo no entiendo es el por qué de esa división xD Lo lógico sería hacerlo al revés para obtener la tangente...
De todas formas a mí los floats nunca se me han quedado a cero exacto, aunque podría ser.
Cita de: Kherom en 6 Enero 2012, 17:18 PM
¿El segundo código va dentro de un while? ¿Cuál es la condición de parada?
Así sin mirar mucho el programa no parece que hayas accedido a memoria que no debes por lo que lo normal es que se te cuelgue si entra en bucle infinito.
De todas formas no he hecho mucho caso al código por que me parece raro de cojones, ¿Por qué no te limitas a sumar a la posición un vector velocidad multiplicado por el tiempo entre frames?