碰撞(带有黑色像素)在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);}