2Fermer4
PolluxLe 29/01/2004 à 20:52
La méthode dont te parlais Kevin doit être (unsigned char(*)[H])ptr...

Mais en principe, tu devrais inverser les indices de tableau et utiliser lvl[y][x] pour que ça soit équivalent à lvl[x + y*W] (et donc ça sera (unsigned char(*)[W])). Et à vrai dire, le plus simple dans ton cas ce serait de passer par un tableau de "unsigned char" et d'utiliser lvl[x + y*w] (quitte à faire #define map(x,y) lvl[(x)+(y)*W]), ce qui te permettra d'utiliser memcpy pour initialiser ton tableau par exemple.
Note : le unsigned c pour eviter un warning

J'en déduis que W et H ne sont pas constants... Alors essaye à tout prix d'éviter les multiplications et les modulos et remplace-les par des décalages ou des ET logiques : arrondis W et H au supérieur, puis prends leur logarithme en base 2; après ça, tu pourras utiliser #define W (1<<W_log) et #define H (1<<H_log) et le code généré par le compilo sera bien plus efficace (mais, si tu as de très grosses maps, il vaudra mieux t'arranger pour qu'elles aient des tailles puissances de 2 pour éviter de gâcher trop de place).