2013-03-20 4 views
1

내 스프라이트가 다른 모양과 충돌하면 내 스프라이트가 사라지고 원본 x/y 위치에 다시 그려지는데 이유가 확실하지 않습니다.충돌 감지/변환 오류

아무도 내 스프린트가 사라지는 것을 막기 위해 코드를 변경하라는 제안을 할 수 있지만 초기 충돌 이전의 위치에 머 무르지 않습니까?

나는 glTranslation의 역전을 시도했지만 함수에서 0의 값을 설정하여 이동을 중지했지만 실패했지만 실패했습니다.

void move(){ 

    if(check_collision(sprite,platform1) || check_collision(sprite,platform2)){ //if colliding 
     //x_Vel = 0; y_Vel = 0; 
    } 
    else{ //if not colliding 
     glTranslatef(x_Vel, y_Vel, 0.0); 
    } 
} 

void drawSprite (RECT rect) { ... } 
+2

상자가 서로 흘러 들어가는 속도가 충분히 빨라지면 충돌 감지가 실패합니다. 이 경우, 뽑은 상자가 다른 상자를 통과하는지 확인하는 더 나은 시스템이 필요합니다. 그것은 어렵지 않습니다, littel 벡터 수학,하지만 당신이 알고 있어야합니다. –

답변

0

여기에 매듭을 맺어 보았으므로 변수 이름을 선택하는 데 도움이되지 않을 수 있습니다.

x_Vely_Vel은 실제로 속도가 아닌 위치로 보입니다. 이들을 glTranslate()에 공급하면 해당 변환이 현재 변환에 추가됩니다. 귀하의 경우에는 그것은 화면에서 당신의 물건이 그려지는 곳을 바꾸는 것입니다. 개체가 충돌하면 번역이 전혀되지 않으므로 물론 다른 장소에서 작업 할 수 있습니다.

분명히 위치를 0으로 설정해도 작동하지 않을 것이며, 부정하지 않을 것입니다.

당신이해야 할 일은 glTranslate()으로두고 그 대신 개체가 충돌 할 때 주어진 방향으로 이동을 허용하지 않습니다. 위치를 업데이트 할 때 발생합니다. 당신은 이미 작동하지 않을 디스플레이 기능 안에서 콜리 전을 처리하려고합니다. 당신은 이미이 시점에서 오브젝트를 움직였습니다. GL은 당신을 도울 수 없습니다.

그래서 처음에는 OpenGL을 사용하는 것이 좋습니다 (이 기능은 더 이상 사용되지 않으며 비효율적입니다). glTranslate() 등을 사용하려는 경우, 물건이 그려집니다. 동작을 처리하지 않습니다. 그것은 당신의 책임입니다.

+0

오, 알았습니다. 그 말이 더 합리적입니다. 설명해 주셔서 감사합니다. 운동을 어떻게 처리 하시겠습니까? 'glTranslation'은 내가 키보드 입력에서 스프라이트를 움직이는 것을 생각할 수있는 유일한 방법입니다. 그래서 나는 그것으로 충돌을 처리하려고 노력하고 있습니다. – Reanimation

+0

glTranslate는 원하는 위치에 스프라이트를 표시합니다. 입력 및 충돌을 포함하여 정확한 위치를 계산하는 것은 사용자의 몫입니다. – JasonD

+0

그래, 그게 내가 불행히도 고심하고있는 곳이야. – Reanimation