그래서 지금 가능한 가장 좋은 방법을 코딩하지 않는다는 것을 이해합니다. 이것은 일종의 시운전입니다. 내가 뭘 하려는지 직사각형과 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.
코드를 좁힐 수 있습니까? 필요한 부분 만 남기기 – Tala
더블 버퍼링, 게임 루프 등 적절한 게임 개발에 대해 배워야한다고 생각합니다. 원한다면 튜토리얼을 줄 수 있습니까? –
그래, 내 코드를 유일한 관련 부분이라고 생각하도록 범위를 좁혔다. 내가했던 것처럼 타이머를 사용하는 대신 종류와 적절한 게임 루프를 버퍼링하는 것에 대해 알고 있습니다.하지만 저는 학교 프로젝트를 위해이 작업을 수행하고 있습니다. 그래서 내가해야 할 일보다 조금 어렵다고 생각합니다. – DaBoydMan