2009-02-01 3 views
3

나는 this flash game을 연주 해왔고 초기 ('lol, fire') 반응을 끝내고 프로그래밍에서이 접촉 - 돌연변이 행동을 어떻게 복제 할 수 있었는지 궁금해졌습니다. 나는 그것이 honeypot xkcd과 조금 같아 보입니다.랜덤 시뮬레이션을 어떻게 만들 수 있습니까?

나는 입자가 서로 빗나가게하고 벽을 포함하는 시나리오로 시작할 것을 생각하고있었습니다. 시퀀스는 '돌연변이'입자의 수를 정해서 시작되며,이 돌연변이 체가 규칙적인 입자와 충돌하면 돌연변이 체가됩니다. 나중에 좀 더 재미있는 일을 할 수있었습니다.

제 문제는 어떻게 시작해야할까요입니다. C#에서 그리기 요소를 사용하여 .NET에서 그리기를 계획하고 있습니다. (비록 C#에 익숙하지 않지만 .NET의 다른 부분이 있다면 알려줘야합니다.)하지만 일반적인 문서가 있다면 (물론 그들이 온라인에서 사용 가능하다면) 그것들을 읽는 것에 흥미가있을 것입니다.

덕분에, 로스

+0

C#에서입니다 : http://www.codeproject.com/KB/game/particlessystems.aspx – Ross

답변

4

나는 상자에 일부 particles 여기에 잘 할 것이다 당신은 당신이 생각하는 것과 바른 길에 생각합니다. 그렇게 구체적이고 단순한 경우에 문서를 찾을 수는 있지만 일부 기술은 필요할 지 모르지만 백엔드 구현은 렌더러에 비해 상대적으로 간단해야합니다.

간단한 방법으로 입자를 이동하려면 위치와 속도를 저장하는 Euler iteration이 있습니다. 위치 = 위치 + 속도 * 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가 상수이면이 방법은 효과적이지만 그렇지 않은 경우 좀 더 복잡한 작업이 필요합니다. 상자와 충돌 지점을 찾고 reflect 충돌 한 얼굴의 상자 밖의 벡터 부분.

입자를 서로 충돌 시키면 거리 확인이 가장 좋으며 거리가 너무 짧으면 반사가 트리거됩니다. 즉, 너무 가까워지면 충돌합니다. 입자가 구형 인 것처럼 속도 구성 요소를 반사하므로 반사의 법선은 위치의 차이입니다.

당신은 유용한 너무 ...

희망이 도움이 gamedev에 this article을 찾을 수 있습니다.

관련 문제