2013-07-24 2 views
0

직사각형이 프로그램 벽 내에 연속적으로 충돌하지만 충돌 검사가 제대로 작동하지 않는 SDL을 사용하여 프로그램을 만들었습니다. `여기 직사각형 바운스 충돌 감지

int main(int argc, char *argv[]){ 
//variable Initialization] 
width = height = 45; 
srcX = srcY = 0; 
destY = destX = 0; 
vlc = 1; 
SDL_Init(SDL_INIT_VIDEO); 
screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); 
SDL_WM_SetCaption("Bouncing Balls","./ball.jpg"); 
backg = IMG_Load("./back.png"); 
ball = IMG_Load("./ball.jpg"); 
while (checkBounce){ 
    //Increase velocity 
    destX += vlc; 
    destY += vlc; 
    //Collision Checking 
     if (destX < 0){ 
      destX = 0; 
      vlc = -vlc; 
      destX += vlc; 
     } 
     if (destY < 0){ 
      destY = 0; 
      vlc = -vlc; 
      destY += vlc; 
     } 
     if (destY + height > 480){ 
      destY = 480 - height; 
      vlc = -vlc; 
      } 
     if (destX + width > 640){ 
      destX = 640 - width; 
      vlc = -vlc; 
     } 
    if (SDL_PollEvent(&event)){ 
     if (event.type == SDL_QUIT) 
      checkBounce = false; 
    } 
//Applying Surfaces 
applySurface(0, 0, backg, screen); 
applyBall(srcX, srcY, destX, destY, width, height, ball, screen); 
SDL_Flip(screen); 
} 
SDL_Quit(); 
return 0; 
} 

일이 일어나고 무엇 GIF 이미지입니다 : Bouncing Rectangle.gif

+0

그것은 좋은 것 :

여기에 편집입니다. –

답변

2

나는 사각형이 제대로 벽에 반사하는 예상 된 결과가 있으리라 믿고있어 여기

코드입니다 ?

하나의 숫자를 사용하는 대신 속도를 x 및 y 구성 요소로 분리해야합니다. 이것은 속도가 2 차원이기 때문입니다.

프로그램에서 충돌이 감지 될 때마다 x 및 y 구성 요소가 모두 음수가됩니다. 이렇게하면 사각형이 경로를 따라 뒤로 바운스됩니다. 당신은 무슨 일이 일어나고 정확히 설명 할 수 있다면

int main(int argc, char *argv[]){ 
    //variable Initialization] 
    width = height = 45; 
    srcX = srcY = 0; 
    destY = destX = 0; 
    vlcX = 1; 
    vlcY = 1; 
    SDL_Init(SDL_INIT_VIDEO); 
    screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); 
    SDL_WM_SetCaption("Bouncing Balls","./ball.jpg"); 
    backg = IMG_Load("./back.png"); 
    ball = IMG_Load("./ball.jpg"); 
    while (checkBounce){ 
     //Increase velocity 
     destX += vlcX; 
     destY += vlcY; 
     //Collision Checking 
     if (destX < 0){ 
      destX = 0; 
      vlcX = -vlcX; 
      destX += vlcX; 
     } 
     if (destY < 0){ 
      destY = 0; 
      vlcY = -vlcY; 
      destY += vlcY; 
     } 
     if (destY + height > 480){ 
      destY = 480 - height; 
      vlcY = -vlcY; 
      } 
     if (destX + width > 640){ 
      destX = 640 - width; 
      vlcX = -vlcX; 
     } 
     if (SDL_PollEvent(&event)){ 
      if (event.type == SDL_QUIT) 
       checkBounce = false; 
     } 
     //Applying Surfaces 
     applySurface(0, 0, backg, screen); 
     applyBall(srcX, srcY, destX, destY, width, height, ball, screen); 
     SDL_Flip(screen); 
    } 
    SDL_Quit(); 
    return 0; 
} 
+0

thaks @Ethan Worley – darpan1118