Me he dado cuenta que hay veces que cuando saltas puedes llegar a pasarte el límite de la superficie quedando el cuadrado cortado. No se si te referías a este fallo, pero se resuelve fácilmente añadiendo la siguiente comprobación:
if(personaje->x>=390)personaje->x=390;
en la función de movimiento hacia adelante y
if(personaje->x<10)personaje->x=0;
en la función de movimiento hacia atrás limitando de este modo las coordenadas si ha habido algún error en las coordenadas de las x en algún momento, que parece estar en el salto.
El error del cálculo de la coordenada x puede ser que lo calcules como incrementos de +-8 (adelante/atrás respectivamente), esto hará que al final quede un número que no será múltiple de 10 y por ello se puede dar el caso de que sobrepase los límites de la superficie.
if(personaje->x>=390)personaje->x=390;
en la función de movimiento hacia adelante y
if(personaje->x<10)personaje->x=0;
en la función de movimiento hacia atrás limitando de este modo las coordenadas si ha habido algún error en las coordenadas de las x en algún momento, que parece estar en el salto.
El error del cálculo de la coordenada x puede ser que lo calcules como incrementos de +-8 (adelante/atrás respectivamente), esto hará que al final quede un número que no será múltiple de 10 y por ello se puede dar el caso de que sobrepase los límites de la superficie.