문제

나는 놀았다 이 플래시 게임 그리고 초기 ( 'lol, fire') 반응을 극복 한 후 나는 어떻게 프로그래밍 에서이 접촉-진단 행동을 복제 할 수 있는지 궁금해하기 시작했습니다. 나는 그것이 조금 비슷하다고 생각합니다 허니팟 xkcd.

나는 입자가 서로를 빗나가는 시나리오와 함유 벽을 시작하는 것을 생각하고있었습니다. 서열은 정해진 수의 '돌연변이 체'입자로 시작될 것이며, 이들 돌연변이 체는 일반 입자와 충돌하면 돌연변이 체가된다. 나중에 더 재미있는 일을 할 수있었습니다.

내 문제는 이것으로 시작하는 방법입니다. .NET의 드로잉 요소를 사용하여 C#에서 수행 할 계획입니다 (C#에 상당히 익숙하지 않지만 .NET의 다른 부분이 있으면 알려야합니다. 'D를 읽는 데 관심이 있습니다 (물론 온라인에서 사용할 수있는 경우).

고마워요, 로스

도움이 되었습니까?

해결책

나는 당신이 당신이 생각하고있는 것을 올바르게 추적하고 있다고 생각합니다. 입자 상자 안에 여기에서 괜찮을 것입니다. 구체적이고 간단한 사례에 대한 논문을 찾을 수는 있지만 필요한 일부 기술에 대해서는 논문을 찾을 수는 없지만 백엔드의 구현은 렌더러에 비해 비교적 간단해야합니다.

입자를 간단한 방법으로 움직이는 것은 다음과 같습니다 오일러 반복, 위치와 속도를 저장하는 곳. 위치 = 위치 + 속도*dt; 여기서 DT는 마지막 프레임 이후 시간의 변화입니다. 할 수 있다면 DT를 고정시키고 렌더러의 포인트 사이를 보간하는 것이 가장 좋습니다. 이렇게하면 안정성 문제가 줄어들고 충돌 감지가 더 쉬워집니다.

벽에서 입자를 반사하려면 X 구성 요소 또는 위치의 Y 구성 요소가 경계를 초과 한 다음 속도의 다른 구성 요소의 부호를 뒤집는 지 확인하십시오.

if(Math.Abs(position.x_component + velocity.x_component * dt) > x_bound) 
    velocity.y_component = -velocity.y_component;

if(Math.Abs(position.y_component + velocity.y_component * dt) > y_bound)
    velocity.x_component = -velocity.x_component;

일정한 DT를 가지고 있다면, 이것은 매우 잘 작동하지만, 그것이 다양하다면 더 복잡한 일을해야합니다. 상자와 함께 충돌 지점을 찾으십시오 반영하다 충돌 된 얼굴 상자 외부의 벡터의 일부.

입자를 서로 충돌하기 위해서는 거리 점검이 가장 좋을 것입니다. 거리가 너무 작아 일단 반사를 트리거합니다. 즉, 너무 가까워지면 충돌합니다. 입자가 구체 인 것처럼 속도 성분을 반영하므로 반사의 정상은 위치의 차이입니다.

당신은 찾을 수 있습니다 이 기사 gamedev에서도 유용한 ...

도움이 되었기를 바랍니다.

다른 팁

왜 클래식 소행성 게임을 시작점으로 보지 않겠습니까? 다음은 Directx를 사용하지 않고 C#에있는 Alink입니다.

http://www.codeproject.com/kb/gdi-plus/asteroids.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top