SDL Collision на основе цвета C - PullRequest
0 голосов
/ 08 апреля 2019

Столкновение (с черным пикселем) прекрасно работает для направлений ВВЕРХ и ВНИЗ, но у меня есть проблемы с направлениями ВЛЕВО и ВПРАВО.Несмотря на то, что используется то же мышление и тот же алгоритм, я не могу понять, что вызывает плохое поведение (после того, как мой персонаж сталкивается со стороны ВЛЕВО или ВПРАВО и когда я нажимаю клавишу ВВЕРХ или ВНИЗ, он телепортируется, как будтопрограмма обнаруживает столкновение, когда оно предположительно не сталкивается ни с одним черным пикселем);Вот ссылка на 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);}
...