2012-12-11 1 views
1

나는 astar 알고리즘을 움직이기위한 작은 프로그램을 만들고 있습니다. 이미지를 보면 노란 차가 많이 돌아 다니고 있습니다. 그것들은 언제든지 충돌 할 수 있습니다. 단지 하나 또는 모두가 단지 어리석게도 서로 충돌 할 수 있습니다.> 10 개의 스프라이트가있을 때 어떻게 여러 개의 스프라이트 충돌을 처리합니까?

어떻게 이러한 충돌을 모두 감지합니까? 어떤 특정 자동차가 다른 자동차에 충돌했는지 어떻게 알 수 있습니까?

각 충돌을 처리하려는 방식은 충돌을 일으키거나 한 대의 자동차를 정지시키고 다른 자동차가 정지 된 자동차 주변의 경로를 계산하도록하는 것입니다. 당신은 클래스 자동차가있는 경우

enter image description here

답변

3

이보다 저렴 솔루션은 자동차 조합을 충돌에 itertools 모듈을 사용하는 것입니다 : 충돌하는 당신은 기능 collideRect을 사용할 수 있습니다 확인이 방법을 사용하는 경우

import itertools 

for c1 in cars: 
    collides_environment(c1) 

for c1, c2 in itertools.combinations(cars): 
    collides(c1, c2) 

, 당신은 쌍을 충돌합니다 자동차는 한 번만 사용하고 자동차는 스스로 충돌하지 않습니다.

1

및 자동차 목록에있는 모든 인스턴스 : 당신은 파이 게임을 사용하고 있고 자동차가 더 많거나 적은 정사각형

for c1 in cars: 
    collides_environment(c1) 
    for c2 in cars: 
     collides(c1,c2) 

. http://www.pygame.org/docs/ref/rect.html#Rect.colliderect

+0

나는 실제로 그것을하고 있었고 전체 목록을 반복했다. 나는 이것을하기에 더 좋은 방법이 있기를 바랬다. 결국 나는 200 대 이상의 자동차를 추가하여 뉴욕에있는 astar를 시뮬레이션 할 계획입니다. – iCodeLikeImDrunk

+2

그럴 경우이 토론에서 확인하십시오. http://gamedev.stackexchange.com/questions/10202/quad-trees-grid-based-collision-putting-logic-into-action – kxtells

+0

스프라이트 충돌 함수가 있습니다. : http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Sprite. 200 대의 차량이 있더라도 모든 충돌을 확인할 필요가 없습니다. 서브 그리드의 자동차 만 비교할 수 있습니다. (쿼드 트리). – ninMonkey

관련 문제