2016-04-20 14 views
0

In dem folgenden Test in der Zeile 133 nach prüfe ich auf Kollision zwischen Zielen und den Kugeln. Ich frage mich, warum die target_hit_list immer nur ein Zielobjekt ist? Liegt es daran, dass target_hit_list in jeder Schleife aktualisiert und neu zugewiesen wird, also immer leer ist, wenn die nächste Kollision stattfindet?Pygame sprite.spritecollide()

Here ist der Link zum Code.

Antwort

1

Ja. Auch die Kugel kollidiert nur mit einem Ziel. Auch sollten Sie den Code aus trennen, so haben Sie eine Hauptschleife, das so geht, mit jedem von ihnen eine Funktion auf ihrem eigenen:

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

Anstatt alles hat mushed zusammen in der gleichen Gegend.

+0

Vielen Dank. Könntest du vielleicht die Reihenfolge zeigen, die du für eine klare Hauptschleife in meiner Hauptschleife bedeutest? Es wäre sehr hilfreich zu sehen, wie es aussehen sollte – amirteymuri

1

etwas wie folgt aus:

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 hat eine andere Funktion, die sofort auf Kollisionen zwischen allen Sprites überprüft. (kollidelistall) Versuchen Sie das ...