2013-07-14 5 views
0

나는 SDL_Rect가 큰 SDL_Rect 안에 있고 그 rect를 벗어날 수 없도록 만들 필요가 있지만 여전히 움직일 수있는 인스턴스가 있습니다. 작은 RECT의 움직임은 버튼을 한 번 클릭하는 위치 보드 게임 운동을 같이 할 필요가 있으며 여기에 특정 코드를 이동 내 코드입니다 :SDL 충돌 처리

if(event.type == SDL_KEYDOWN) { 
switch(event.key.keysym.sym) { 
case SDLK_UP: 
    yVel -= 10; 
    if (!check_collision(box,Cont)) 
    { 
     std::cout<<"in the water"<<std::endl; 
     box.y -= yVel - 10; 
    } 
    break; 
case SDLK_DOWN: 

     if (!check_collision(box,Cont)) 
    { 
     std::cout<<"in the water"<<std::endl; 
     box.y -= yVel + 20; 
    } 
    else 
    { 
     yVel += 10; 
    } 
    break; 
case SDLK_LEFT: 
    xVel -= 10; 
     if (!check_collision(box,Cont)) 
    { 
     std::cout<<"in the water"<<std::endl; 
    } 
    break; 
case SDLK_RIGHT: 
    xVel += 10; 
     if (!check_collision(box,Cont)) 
    { 
     std::cout<<"in the water"<<std::endl; 
    } 
    break; 
case SDLK_1: 
    return 2; 
    break; 

    } 
} 
+0

"질문"에 질문이없는 것 같습니다. 나는 그것이 당신이 게시하고 귀하의 게시물을 포착, 실제 질문을 추가하는 것을 잊어 버린 그 사건 중 하나라고 확신합니다 ... –

+0

나는 그것이 그것의 외부 있는지 확인할 수 있도록 어떻게 만들 수 있는지 묻고 있어요 rect 및 충돌을 변경하면 내부에 유지 될 수 있습니다. –

+0

@EvanClark 현재 설정에 어떤 문제가 있습니까? –

답변

1

당신은 당신의 SDLK_DOWN의 일관성과 입력의 휴식을 - 충돌이 없으면 속도 변화가 일어나지 않습니다.

입력 코드가 좌표를 변경하고 있습니다. 그렇게해서는 안됩니다. 입력 코드가 "의도"를 관리하게하고, 게임 루프가 오브젝트와 충돌 감지에 속도를 적용하게하십시오.

또한 충돌 점검을 수행하여 position에 있고 delta으로 이동했는지 확인해야합니다. 충돌이 발생합니까? 내가 충돌한다면, 충돌 반응은 무엇입니까? 엔티티가 충돌시 "미끄러지 듯"하거나 충돌이 감지되는 즉시 멈추고 싶습니까?

보드 게임을하는 것을 고려하면 충돌 감지를 수행하지 않아도됩니다. 보드를 가능한 좌표의 그래프로 나타내며 마우스 클릭을 보드 좌표로 변환하고 현재 위치와 대상 사이의 최단 경로 (A*algorithm)를 계산하십시오. 무효 클릭 (범위 외)은 이동 명령으로 해석해서는 안됩니다.