2016-04-20 3 views
0

В следующем тесте в строке 133 и далее я тестирую столкновение между целями и пулями. Мне интересно, почему target_hit_list всегда есть только один объект Target? Это потому, что target_hit_list обновляется и назначается в каждом цикле, поэтому он всегда пуст, когда происходит следующее столкновение?Pygame sprite.spritecollide()

Here - ссылка на код.

ответ

1

Да. Также пуля только сталкивается с одной целью. Кроме того, вы должны отделить код, так что у вас есть основной цикл, который идет, как это, с каждым из них функцию самостоятельно:

check_events() 
update_player_position() 
collision_check() 
draw_all() 

Вместо того, чтобы иметь все mushed вместе в одной и той же области.

+0

спасибо. Может быть, вы можете показать заказ, который вы имеете в виду, для ясного основного цикла в моем основном цикле? Было бы очень полезно посмотреть, как это должно выглядеть – amirteymuri

1

что-то вроде этого:

running = True 
while running: 

    check_events() 
    update_player_position() 
    collision_check() 
    draw_all() 

def check_events(): 

    for e in pygame.event.get(): 
     if e.type==pygame.QUIT or (e.type==pygame.KEYDOWN and e.key==pygame.K_ESCAPE): 
      runs=0 
     player.shoot() 

def update(): 

     #logics 
    for ahsm in all_have_same_method: 
     ahsm.hanging() 

    all_have_same_method.update() 


def collision_check(): 

    for b in bullet_group: 
     target_hit_list=pygame.sprite.spritecollide(b,target_group,0) 
     for thl in target_hit_list: 
      score+=1 
     print target_hit_list #why is in the target_hit_list allways only one Target object? 

def draw(): 
    #drawings 
    #draw score 
    draw_score=font.render(str(score),True,RED) 
    screen.fill(BLACK,(0,0,50,20)) 
    screen.set_colorkey(BLACK) 
    screen.blit(draw_score,(0,0)) 

    all_have_same_method.draw(screen) 
1

Pygame имеет еще одну особенность, которая проверяет наличие столкновений между всеми спрайтов сразу. (collidelistall) Попробуйте это ...