J'ai un petit problème d'optimisation que certains ont peut-être rencontré, mais les jeux c'est pas mon domaine alors je suis un peu perdu...
J'ai un petit prog où on dirige un perso vu de dessus, mais ça ne fonctionne pas en déplacement case par case, on peut très bien en chevaucher plusieurs. Le problème est alors de tester les collisions...
Je pensais donc tester les 4 coins du sprite de mon perso, qui fait 4 pixels de moins que les murs en largeur et en hauteur.
Voici donc comment tester les 4 coins, en ayant une matrice et les positions X et Y du perso (qui sont des positions sur L'ECRAN, pas sur la matrice) :
map[((pos_x+2)>>4)][((pos_y+2)>>4)] (>>4 parceque les cases font 16x16 pixels)
map[((pos_x+13)>>4)][((pos_y+13)>>4)]
map[((pos_x+2)>>4)][((pos_y+13)>>4)]
map[((pos_x+13)>>4)][((pos_y+2)>>4)]
Mais pour tout tester ça donne une ligne monstrueuse, d'autant plus que mon tableau est à une seule dimention et que donc il faut convertir. Voilà la ligne fort sympatique :
if(!(tbl_val[((int_nwx+2)>>4)+((tbl_pos[1]+2)>>4)*tbl_num[1]] || tbl_val[((int_nwx+13)>>4)+((tbl_pos[1]+13)>>4)*tbl_num[1]] || tbl_val[((int_nwx+2)>>4)+((tbl_pos[1]+13)>>4)*tbl_num[1]] || tbl_val[((int_nwx+13)>>4)+((tbl_pos[1]+2)>>4)*tbl_num[1]])) tbl_pos[0]=int_nwx;
N'y a-t-il pas des moyens d'optimiser ça (voire de changer completement de méthode) ?