2017-01-14 4 views
-3

Sagen wir, ich habe eine Liste namens my_list und eine Funktion namens my_function und my_function hängt Elemente an my_list basierend auf welchen Teil der Oberfläche gameDisplay angeklickt wurde. Wenn Sie jedoch die Maus für mehr als einen Frame gedrückt halten, hängt mehr als ein Element an my_list an. Dies ist nicht das Ergebnis, das ich anstrebe. Ich frage mich, ob es einen Weg Sie dies tun können, ohne mehr als eine der einzelnen Elemente anhängtWie man Elemente zu einer Liste jeweils einmal in Python anhängen

Vielen Dank für Ihre Hilfe my_list

+0

Zeigen Sie uns Ihren Code. – DyZ

+0

Wo ist dein Code? –

+1

Vielleicht können Sie 'set()' verwenden? – ADR

Antwort

0

Sie nicht Code zeigen, haben aber ich denke, man pygame.mouse.get_pressed() verwenden, die True alles gibt die Zeit, wenn Sie den Knopf gedrückt halten. Und das kann dein Problem sein.

Sie können eines von zwei Dingen tun:

Verwendung event.MOUSEBUTTONDOWN, die nur einmal erstellt wird - wenn die Taste Änderungszustand von not-pressed in pressed.

Oder:

Gebrauch zusätzliche Variable, die pygame.mouse.get_pressed() aus vorherigen Rahmen remeber wird. Und dann vergleichen, wenn jetzt Taste gedrückt wird, aber im vorherigen Frame nicht gedrückt wurde, dann Element zur Liste hinzufügen.


EDIT: alter Code aus verschiedener Frage, die event.MOUSEBUTTONDOWN verwendet Farbe zu ändern.

#!/usr/bin/env python 

# http://stackoverflow.com/questions/33856739/how-to-cycle-3-images-on-a-rect-button 

import pygame 

# - init - 

pygame.init() 
screen = pygame.display.set_mode((300,200)) 

# - objects - 

# create three images with different colors 
images = [ 
    pygame.Surface((100,100)),  
    pygame.Surface((100,100)),  
    pygame.Surface((100,100)),  
]  

images[0].fill((255,0,0)) 
images[1].fill((0,255,0)) 
images[2].fill((0,0,255)) 

images_rect = images[0].get_rect() 

# choose first image 
index = 0 

# - mainloop - 

running = True 

while running: 

    # - events - 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 

     elif event.type == pygame.MOUSEBUTTONDOWN: 

      if event.button == 1 and images_rect.collidepoint(event.pos): 
       # cycle index 
       index = (index+1) % 3 

    # - draws - 

    screen.blit(images[index], images_rect) 
    pygame.display.flip() 

# - end - 

pygame.quit() 

GitHub: furas/python-examples/pygame/button-click-cycle-color

Verwandte Themen