2012-01-11 5 views
1

내 목표는 볼 스프라이트가 'g_ball'스프라이트 중 하나에 도달 할 때 내 프로그램이 충돌을 감지 할 수있게하는 것입니다. 코드는 apperently 충돌을 감지하고 그것을 테스트하는 "print"문을 가지고 있지만 ... 스프라이트 중 아무 것도 만지지 않고도 계속 "진행"을 인쇄합니다. 여기에 코드입니다 : 더이 충돌 설정 오프셋이 없기 때문에sprite가 글자 그대로 충돌하지 않아도 프로그램이 충돌을 감지합니다 'pygame.sprite.collide_rect'

while 1: 
    screen.blit(background, (0,0)) 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 


     if event.type == KEYDOWN: 
      if event.key == K_a: 
       m_x = -4 
       s+=1 
      elif event.key == K_d: 
       m_x = +4 
       s2+=1 
     if event.type == KEYUP: 
      if event.key == K_a: 
       m_x = 0 
      elif event.key == K_d: 
       m_x = 0 

    x+= m_x 
    y+= m_y  

    ball = pygame.sprite.Sprite() 
    ball.image = pygame.image.load('red_ball.png').convert() 
    ball.rect = ball.image.get_rect() 
    ball.image.set_colorkey((white)) 
    screen.blit(ball.image,(x,y)) 
    if x > 640: 
     x = 0 
    if x < 0: 
     x = 640 


    g_ball = pygame.sprite.Sprite() 
    g_ball.image = pygame.image.load('green_ball.png').convert() 
    g_ball.rect = g_ball.image.get_rect() 
    g_ball.image.set_colorkey(white) 
    screen.blit(g_ball.image,(50,t)) 
    t+=5 
    if t > 521: 
     t = 0 
    collision = pygame.sprite.collide_rect(ball, g_ball) 
    if collision == True: 
     print ('PROGRESS!!!') 

답변

0

그것은, 당신은 단지 screen.blit 오프셋 통과했다.

귀하의 고정 된 코드는이 될 것입니다 :

... 
ball.rect = ball.image.get_rect() 
ball.rect.topleft = (x, y) 
... 
g_ball.rect = g_ball.image.get_rect() 
g_ball.rect.topleft = (50, t) 
... 
0

nightcracker이 권리입니다. 이 루프 (가능한 한 빨리 실행해야합니다)에서 무엇을하고 있는지 깨닫고 있습니까? 2 개의 새로운 볼을 만들고, hd에서 이미지를로드하고, (0,0)에 배치 한 다음, 주어진 위치의 스크린에 수동으로 프린트합니다. 이 마지막 부분은 여러분이 어딘가에 표시한다는 것을 의미하지만, 실제로 어디에 있는지는 알 수 없습니다 (ball.rect = ball.image.get_rect()로 실제 위치를 설정했습니다). 그들은 실제로 (0,0)에 있으며, 항상 충돌하고 있습니다.

화면에 표시되는 방식이 좋지 않은 경우 렌더러를 사용해야합니다. 어쨌든 아마 당신은 먼저 자습서를 먼저 시험해보고 서피스 (Surface)와 스프라이트 (Sprite)가 무엇인지 알아야합니다. 메인 루프에 넣은 것을 조심하십시오. (항상 새로운 볼을 만드는 이유는 시작시 한 번 만들 수 있습니다) 코드가 더 예리하고 FPS가 증가합니다

관련 문제