Столкновение (с черным пикселем) прекрасно работает для направлений ВВЕРХ и ВНИЗ, но у меня есть проблемы с направлениями ВЛЕВО и ВПРАВО.Несмотря на то, что используется то же мышление и тот же алгоритм, я не могу понять, что вызывает плохое поведение (после того, как мой персонаж сталкивается со стороны ВЛЕВО или ВПРАВО и когда я нажимаю клавишу ВВЕРХ или ВНИЗ, он телепортируется, как будтопрограмма обнаруживает столкновение, когда оно предположительно не сталкивается ни с одним черным пикселем);Вот ссылка на git для программы. Лучше, если вы протестируете ее и убедитесь сами https://github.com/TheRealSumpark/Color_Collision.git
Заранее спасибо, любая помощь будет очень признательна
Я подумал, что это может быть плохочтение цвета пикселя, попытался изменить алгоритм чтения пикселя, но ничего не получалось, я получал то же неправильное поведение
case LEFT:
Pos_perso.x-=15;
C.Y=Pos_perso.y;
C.X=Pos_perso.x;
while (!collision &&C.Y<=(Pos_perso.y+Pos_perso.h))
{collision= Collision_Parfaite(Background,C);C.Y++;
if (collision)
{Pos_perso.x++;
C.Y=Pos_perso.y;
C.X=Pos_collision=0;}}break;
int Collision_Parfaite(SDL_Surface *Background,Coordinate C)
{int collision=0;
SDL_Color color;
color=GetPixel(Background,C);
if (color.r==0 && color.g==0 && color.b==0)
{collision=1;}
return collision;}
SDL_Color GetPixel(SDL_Surface *Background ,Coordinate C)
{SDL_Color color;
Uint32 col=0;
char* pPosition=(char* ) Background->pixels;
pPosition+= (Background->pitch * C.Y);
pPosition+= (Background->format->BytesPerPixel * C.X);
memcpy(&col ,pPosition ,Background->format->BytesPerPixel);
SDL_GetRGB(col,Background->format, &color.r, &color.g, &color.b);
return (color);}