2014-03-03 3 views
2

그래, 나는이 프로그램에 대한 또 다른 질문을 부탁 해요 사각형 : D파이 게임 충돌 객체 감지하고

어쨌든, 나는 현재 그들 사이에 간격으로 화면에 두 줄을 생성하는 프로그램은을 스크롤 할 수 있습니다. 여기에서 분명히 두 개체가 충돌하는지 확인해야합니다. 나는 하나의 스프라이트와 하나의 직사각형을 가지고 있기 때문에 두 개의 클래스를 만드는 것은 약간 무의미하고 과잉이라고 생각했습니다. 그러나 필자는 분명히 필요하지 않은 클래스와 관련된 자습서 만 찾을 수 있습니다. 그래서, 제 질문은 실제로 : 표준 이미지와 파이 게임 rect 사이의 충돌을 테스트 할 수 있습니까? 그렇지 않은 경우 이미지, 사각형 또는 두 스프라이트 모두 어떻게 변환 할 수 있습니까? (모두 바람직 클래스를 사용하지 않고).

주 (가 차이가 있는지) 화상과 직사각형이 다음과 같은 방법으로 생성 된 자체 이미지는 위치가없는

bird = pygame.image.load("bird.png").convert_alpha() 
pipeTop = pygame.draw.rect(screen, (0,200,30), Rect((scrollx,0),(30,height))) 
pipeBottom = pygame.draw.rect(screen, (0,200,30), Rect((scrollx,900),(30,-bheight))) 

답변

3

. rect와 세계에 배치되지 않은 무언가 사이의 충돌을 테스트 할 수 없습니다. 클래스 파를 클래스 pygame.Sprite와 함께 하위 클래스로 만들 것을 권장합니다.

파이 게임은 이미 충돌 감지가 내장되어

간단한 예를

bird = Bird() 
pipes = pygame.Group() 
pipes.add(pipeTop) 
pipes.add(pipeBottom) 

while True:  
    if pygame.sprite.spritecollide(bird,pipes): 
     print "Game Over" 

편집 :.

클래스 두려워하지 마십시오, 당신은 조만간 어쨌든 그들을 사용해야합니다 . 정말로 스프라이트를 사용하고 싶지 않은 경우 birds rect와 파이프를 사용하고 collide_rect을 호출하여 겹치는 지 확인할 수 있습니다.

EDIT2 : 당신은 다음과 같은 중력의 힘으로 새를 아래로 이동합니다 이동, 등의 방법을 추가 할 수

class Bird(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 

     self.image = pygame.image.load("bird.png").convert_alpha() 

     # Fetch the rectangle object that has the dimensions of the image 
     # Update the position of this object by setting the values of rect.x and rect.y 
     self.rect = self.image.get_rect() 

파이 게임 문서에서 수정

예를 들어 조류 클래스입니다.

동일한 내용이 Pipe에 적용되지만 이미지를로드하는 대신 비어있는 서페이스를 만들어 색상으로 채울 수 있습니다.

image = pygame.Surface(width,height) 
image.fill((0,200,30) 
+0

그리고 나는 새가 스프라이트 만들기 위해 클래스에 빠뜨리는 것이 무엇? 또한 하위 클래스 pygame.Sprite 부분을 설명 할 수 있습니까? 감사! – Harvey

1

당신은 단지 x와 y 값을 가져 그들을 비교할 수 있습니다

if pipe.x < bird.x < pipe.x+pipe.width: 
    #collision code 
    pass 
+0

나는 이것이 내가 그 일을 끝내는 방법이라고 생각한다. – Harvey