Hola, estoy desarrollando un juego(obio xDD). Bueno, la cosa que llevo ya mucho tiempo con un bug que no se de donde coño sale.
Tengo tres objetos que colisionan. El personaje, y los enemigos(zombis).
Todos los zombis que saco(mediante una funcion puedo sacar los que quiera), colisionan perfectamente con el personaje, pero el problema esta en que el personaje SOLO COLISIONA CON UN ZOMBI.
Tengo el codigo repartido en varios archivos, pongo aqui la parte que hace que colisione:
main.c (este codigo esta dentro de una funcion que inicia todo el motor del juego y el personaje):
//////////////////////////////////////////////
//Movimiento
//////////////////////////////////////////////
if(Pad.Held.Down && personaje.col1 == 0){
personaje.y +=3;
}
if (Pad.Held.Up && personaje.col2 == 0){
personaje.y -=3;
}
if (Pad.Held.Right && personaje.col3 == 0){
personaje.x+=3;
}
if (Pad.Held.Left && personaje.col4 == 0){
personaje.x-=3;
}
zombis.h (aqui esta toda la IA de los enemigos, mediante la funcion crearzombi(s32 nzom); creo un zombi y le asigno un valor que identifica a cada zombi en un array de estructuras):
if (personaje.x>zombi[nzom].x-personaje.scrollx-32 && personaje.x<zombi[nzom].x-personaje.scrollx+32 && personaje.y>zombi[nzom].y-personaje.scrolly-50 && personaje.y < zombi[nzom].y-personaje.scrolly + 50){
personaje.colision =1;
}
else{
personaje.colision = 0;
}
if (personaje.y>zombi[nzom].y-personaje.scrolly-50 && personaje.y < zombi[nzom].y-personaje.scrolly -38 && personaje.x>zombi[nzom].x-personaje.scrollx-32 && personaje.x<zombi[nzom].x-personaje.scrollx+32){
personaje.col1 = 1;
}
else {
personaje.col1 = 0;
}
if (personaje.y < zombi[nzom].y-personaje.scrolly + 50 && personaje.y>zombi[nzom].y-personaje.scrolly+38 && personaje.x>zombi[nzom].x-personaje.scrollx-32 && personaje.x<zombi[nzom].x-personaje.scrollx+32){
personaje.col2=1;
}
else {
personaje.col2=0;
}
if (personaje.x>zombi[nzom].x-personaje.scrollx-32 && personaje.x<zombi[nzom].x-personaje.scrollx-20 && personaje.y>zombi[nzom].y-personaje.scrolly-64 && personaje.y < zombi[nzom].y-personaje.scrolly + 64){
personaje.col3 = 1;
}
else {
personaje.col3=0;
}
if (personaje.x<zombi[nzom].x-personaje.scrollx+32 && personaje.x>zombi[nzom].x-personaje.scrollx+20 && personaje.y>zombi[nzom].y-personaje.scrolly-64 && personaje.y < zombi[nzom].y-personaje.scrolly + 64){
personaje.col4 = 1;
}
else {
personaje.col4 = 0;
}
Mal del todo no puede estar porque si saco un solo zombi, colisiona, si saco varios, solo colisiona con uno (el promero que creo con mi funcion).
Todo el codigo que e puesto arriba es comprobado por el bucle principal, asi que no es ningun error tonto.
Aver si alguien tiene una idea para solucionar esto. No se si sera porque no comprueba todo el array (aunque no, porque si no lo comprovara hay muchas cosas que no funcionarian de mi codigo que si funcionan).
Hay lo dejo, si alguien sabe que me ayude.
salu2 y gracias