C#즐거운 게임 만들기 강좌의 판정편

이것은 수학입니까?주요 내용입니다.그리고 죽을 뻔했어.괜찮을 것 같은데 참고해주세요.그리고 2D 게임을 구상하고 있습니다.
주위의 판단을 특별히 조사한 것이 아니라 모두 나의 시행착오로 만들어진 것이다.이런 기사를 읽지 말고 SIV 3D의 물리를 참고하세요.

필요조건


판정이 나왔다고 하지만 당첨된 것만 알고는 부족하다.어디선가 그 법선의 벡터가 무엇인지 모르면 물리 운동을 할 수 없다.
맞다
어느 곳인지
• 물체를 고속으로 이동할 때도 떨어지지 마라
이상의 조건이 필요합니다.

알았어, 맞아.


기본적으로 모든 물체는 변의 집합으로 구성되어 있다.그래서 만약 변과 변이 교차한다면 옳다고 볼 수 있을 것이다.
사이드와 사이드가 교차하는지 조사하는 의식이 그렇습니다.
kousaman.cs
float ax1,ay1,ax2,ay2;
float bx1,by1,bx2,by2;

double c1=(ax2-ax1)*(by1-ay1) - (ay2-ay1)*(bx1-ax1);
double c2=(ax2-ax1)*(by2-ay1) - (ay2-ay1)*(bx2-ax1);
double c3=(bx2-bx1)*(ay1-by1) - (by2-by1)*(ax1-bx1);
double c2=(bx2-bx1)*(ay2-by1) - (by2-by1)*(ax2-bx1);

if(c1*c2<0&&c3*c4<0)
{
 Console.WriteLine("kousa!!");
}
이렇게 하면 판정선의 교차가 되겠네요♡
상세한 상황은

그리고 작은 도형이 큰 도형에 완전히 수납될 때의 상황을 감안하여 구역 내에 약간의 함수가 있는지 판단해야 한다.이것은 도형마다 다르다.둥글면 간단하지만 다각형은 회전 각도를 고려해야 하기 때문에 좀 번거롭다.
원에는 정점이 없지만 원주를 적당히 나누어 정점으로 삼아라.
만약 이 두 개가 있다면 두 개의 특정한 도형이 충돌하는지 아닌지를 판정할 수 있다.

어딘지 알아요.


물리 운동을 하기 위해서는 적중 부위의 표면을 확인해야 한다.
엄격한 시뮬레이션은 불가능하니 1프레임 앞의 위치 관계에서 어느 쪽을 부딪혔는지 확인하세요.아마도 이렇게 하면 순조롭게 진행될 수 있을 것이다.
그래서 내가 이런 방법을 하는 거야.이것은 정사각형의 상황이다.
Rectangle.cs
public override double gethosen(float px, float py)
        {
            float dx = px - gettx();
            float dy = py - getty();
            //これで回転も含めて相対座標に変える
            double ddx = dx * Math.Cos(-rad) - dy * Math.Sin(-rad);
            double ddy = dx * Math.Sin(-rad) + dy * Math.Cos(-rad);

            double b = Math.Atan2(h, w);
            double a = Math.Atan2(ddy, ddx);
            double res ;
            //後は角度によって4つに場合分けする。回転を足すのを忘れずに
            if (-b <= a && a <= b) res= rad;
            else if (b <= a && a <= Math.PI - b) res= Math.PI / 2 + rad;
            else if(-Math.PI + b <= a && a <= -b) res= -Math.PI / 2 + rad;
            else res=  Math.PI+rad;
            return Math.Atan2(Math.Sin(res), Math.Cos(res));
        }
다음 이미지에 따라 이동 거리가 결정됩니다.

좋지 않지만 십자가 교차하는 곳은 사각형을 중심으로 한다고 생각하세요.
오렌지는 법선 벡터가 표준화된 점 중 중심과 가장 작은 차이(마이너스 거리도 포함)점을 구한다.미안합니다. 저는 국어 능력이 없어서 말로 개괄적으로 설명할 수 없습니다.
파란색의 요구는 매우 간단하다.
그리고 중심을 오렌지+블루로 이동하면 됩니다.근데 이것도 문제야.

이런 상황에서 판정하면 순간이동처럼

이렇게 데이텀 그래프를 변경하면 됩니다.따라서 이동 거리가 작은 쪽을 이용하면 순조롭게 진행될 수 있다.

물체를 고속으로 이동할 때도 떨어지지 마라


물체가 고속으로 움직이면 떨어지기 때문에 이를 막기 위해 이런 인상으로 하자.

한 프레임 앞의 도형의 정점과 새로운 선분을 그 선분으로 판단하면 비교적 쉽다.나는 대략적인 선이 교차하지 않는 도형은 모두 점을 포함하는 도형으로 채울 수 있다고 생각한다

최후


주위의 판정은 엄격할수록 무겁다.따라서 자신의 게임에서 판정하는 것이 좋다.

좋은 웹페이지 즐겨찾기