基于颜色C的SDL碰撞

时间:2019-04-07 23:15:26

标签: c sdl collision-detection collision

碰撞(带有黑色像素)在UP和DOWN方向上都很好,但是我在LEFT和RIGHT方向上有问题。即使使用相同的思路和算法,我也无法掌握导致不良行为的原因(当我的角色从左或右碰撞时,当我按下UP或DOWN键时,它会像当程序认为没有与任何黑色像素碰撞时,它正在检测碰撞); 这是该程序的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);}

0 个答案:

没有答案