2016-07-05 5 views
0

좋아,Pygame 충돌과 스프라이트 변경

나는 모든 곳을 보았지만 여전히 파이 게임 충돌을 파악할 수 없다. 저는 두 개의 스프라이트를 가지고 있습니다 : 착륙선과 달 표면. 달은 투명한 배경을 가진 고르지 않은 표면이며, 착륙선은 L, D, UP 키 누르기로 이미지를 통해 변화하는 스프라이트입니다.

무언가 내가 충돌 감지에 관해서 잘못하고있다. 그렇지 않으면, 내 프로그램에서 모든 것이 순조롭게

를이 내 착륙선 클래스입니다 것입니다 :

class ShipClass(pygame.sprite.Sprite): 
def __init__(self, image_file, position): 
    pygame.sprite.Sprite.__init__(self) 
    self.imageMaster = pygame.image.load(image_file) 
    self.image = self.imageMaster 
    self.rect = self.image.get_rect() 
    self.mask = pygame.mask.from_surface(self.imageMaster) 
    self.rect.topleft = position 

    ## This doesn't work 
# def checkCollision(self, Mask): 
# if Mask.overlap_area 

def update(self): 
    self.rect = self.image.get_rect() 

그리고 이것은 나의 달 표면 클래스입니다 :이 너무에 추가해야 할 무엇

class MoonSurface(pygame.sprite.Sprite): 
    def __init__(self, image_file, position): 
     pygame.sprite.Sprite.__init__(self) 
     self.imageMaster = pygame.image.load(image_file).convert_alpha() 
     self.image = self.imageMaster 
     self.rect = self.image.get_rect() 
     self.rect.topleft = position 

내 게임에서 착륙선이 달에 부딪히면 가변 정지를 1로 설정하고 충돌을 1로 설정합니까? 당신이이 있는지 확인하려면 같은

speed = [0,0] 
position = [width-524,height-718] 
gravity = 0.05 
StartingFuel = 100 

done = False 
while not done: 
    event = pygame.event.poll() 
    if event.type == QUIT: 
     pygame.quit() 
     sys.exit(0) 
    elif event.type == pygame.KEYDOWN: 
     if event.key == K_ESCAPE: 
      pygame.quit() 
      sys.exit(0)    
    else: 
     lander = ShipClass('lander.png', position) 

    keys = pygame.key.get_pressed() 
    if keys[pygame.K_LEFT]: 
     lander = ShipClass('landerLeft.png', position) 
     # lander.set_colorkey(BLACK) 
     speed[0] += 0.3 
     fuel -= 1 
    if keys[pygame.K_RIGHT]: 
     lander = ShipClass('landerRight.png', position) 
     # lander.set_colorkey(BLACK) 
     speed[0] -= 0.3 
     fuel -= 1 
    if keys[pygame.K_UP]: 
     lander = ShipClass('landerUp.png', position) 
     # lander.set_colorkey(BLACK) 
     speed[1] -= 0.4 
     fuel -= 1 

    speed[1] += gravity 
    position[0] += speed[0] 
     position[1] += speed[1] 
     if position[0] < 0: 
      position[0] = width 
     elif position[0] > width: 
      position[0] = 0 
    screen.blit(lander.image, position) 

답변

0

것 같습니다 : 나는에 또한 MoonSurface 클래스와 착륙 패드를 추가하고 그들을 안타 경우에만 설정이 다음과 같이 내 스프라이트가 이동 1.

에 중단 계획 오브젝트가 겹칩니다. 운 좋게 파이 게임에는 두 개의 직사각형이 겹쳐져 있는지 확인하는 내장 함수 colliderect가 있습니다. pygame.Rect

: 여기
def overlaps (self, other_rect): 
    return self.rect.colliderect(other_rect) 

이 문서입니다 : 나는 당신의 객체가 파이 게임 사각형의 변수는 RECT 명명 한 것을보고 나는 여기에 클래스 메소드에 넣어 한