0

그래서 지금 가능한 가장 좋은 방법을 코딩하지 않는다는 것을 이해합니다. 이것은 일종의 시운전입니다. 내가 뭘 하려는지 직사각형과 intersects 속성 (미안 올바른 용어를 사용하지 않는 경우)를 사용하여 벽 충돌입니다. 지금까지 나는 화면에 2 개의 직사각형을 가지고 있습니다. 1 플레이어가 제어하고 다른 플레이어가 충돌합니다. 충돌하면 플레이어가 움직이지 않습니다. 문제는 플레이어가 이미 충돌 한 상태에서 사각형으로 이동하려고하는 경우 플레이어가 이동 방향과 수직이 아닌 방향으로 이동할 수 없다는 것입니다. 즉, 플레이어가 오른쪽 화살표 키를 누른 상태로 사각형으로 이동하면 위아래로 움직일 수 없다. 이 게임은 x 또는 y 좌표가 유효하지 않은 경우 기록 된 마지막 유효 좌표로 다시 이동하지만 유효한 x 및 y 좌표를 별도로 감지하는 데 문제가 있다는 전제에서 작동합니다. 다음은 코드입니다.사각형을 사용하는 동안 충돌 감지

public void Collision() 
{ 

    if(x < 0) 
     x = 0; 

    if(x > 400 - width) 
     x = 400 - width; 

    if(y < 0) 
     y = 0; 

    if(y > 300 - height) 
     y = 300 - height; 


    rect1 = new Rectangle(x, y, 16, 16); 
    rect2 = new Rectangle(sx, sy, wid, hei); 

    if(!rect1.intersects(rect2)) 
    { 
     validX = true; 
     validY = true; 
    } 
    else 
    { 
     validX = false; 
     validY = false; 
    } 


    if(validX) 
    { 
     lastValidX = x; 
    } 

    if(validY) 
    { 
     lastValidY = y; 
    } 

    if(!validX) 
    { 
     x = lastValidX; 
    } 

    if(!validY) 
    { 
     y = lastValidY; 
    } 

} 

가이 클래스의 Collision() 메소드는 내가 믿기 어려운 문제입니다. 그래, 내 코드는 꽤 지저분하지만 지금은 테스트 일 뿐이다.

감사합니다. David.

+0

코드를 좁힐 수 있습니까? 필요한 부분 만 남기기 – Tala

+0

더블 버퍼링, 게임 루프 등 적절한 게임 개발에 대해 배워야한다고 생각합니다. 원한다면 튜토리얼을 줄 수 있습니까? –

+0

그래, 내 코드를 유일한 관련 부분이라고 생각하도록 범위를 좁혔다. 내가했던 것처럼 타이머를 사용하는 대신 종류와 적절한 게임 루프를 버퍼링하는 것에 대해 알고 있습니다.하지만 저는 학교 프로젝트를 위해이 작업을 수행하고 있습니다. 그래서 내가해야 할 일보다 조금 어렵다고 생각합니다. – DaBoydMan

답변

1

당신은 (하나가 거짓이고, 다른 하나에 해당하는 경우 즉,이 경우의 검출) 근처에 별도의 로직을 수행하여 설명하는지 구현할 수 있습니다 그러나

if(!rect1.intersects(rect2)) 
{ 
    validX = true; 
    validY = true; 
} 
else 
{ 
    validX = false; 
    validY = false; 
} 

, 그것은 아마도 당신이 안 보인다 직사각형이 처음에는 "충돌"상태가되도록 허용해야합니다. 예를 들어, Move 메소드를 다음과 같이 변경할 수 있습니다.

public void Move() 
{ 
    int oldX = x, oldY = y; 
    x += dx; 
    y += dy; 
    if (Collision()) { 
     x = oldX; 
     y = oldY; 
    } 
} 
+0

하나의 축에만 충돌이있을 때를 감지하려고 시도했지만 사각형과 교차에 관해서는 어떻게해야하는지 잘 모릅니다. 나는 그것을 시험 할 것이고, 내가 어떻게에 관해 알 수 있는지에 관해 안다. – DaBoydMan