2016-09-26 7 views
0

ich auf einem RPG-Spiel arbeite, und ich möchte, dass meine playbutton so schnell verschwinden, wie sie gedrückt wurde. Gibt es eine Methode, von der ich das kann? Ich habe verschiedene Spielzustände sind sie: GAME, MENU, START Die playbutton auf dem START-Spielzustand angezeigt und ich möchte es verschwinden, wenn sie gedrückt wird oder wenn das Spiel Zustand ändert. Vielen Dank für Ihren Beitragmachen pygame Sprites verschwinden in Python

+0

In tkinter, würde ich start.unxyz() in der Start-Click-Handler setzen, wobei xyz Unabhängig davon, welche der Ort ist, Packung oder Raster verwendet, um es erscheinen zu lassen. pygame muss eine ähnliche Methode zum Verschwinden von Sprites haben. Durchsuchen Sie die Dokumente erneut. –

+0

@TerryJanReedy Es gibt nichts Entsprechendes in Pygame. Sobald etwas auf den Bildschirm gezeichnet ist, wird es für den Rest des Programms da sein, wenn es nicht mit etwas anderem überstrichen wird. –

+0

@TedKleinBergman Die tk-Geometrie-Methoden fügen ein Widget in eine Widget-Liste ein und die un-Methoden entfernen es aus der Liste. Dies scheint den Methoden pygame group.add und sprite.kill zu entsprechen. Das physische Neuzeichnen * ist jedoch * anders, und hier haben Sie Recht. Tk arbeitet mit dem OS-Fenstermanager zusammen, und Benutzercode ist nicht direkt beteiligt. 'Überstreichen' geschieht automatisch. Pygame erfordert eine explizite Bildschirmzeichnung vom Benutzer: mehr Flexibilität, mehr Verantwortung. –

Antwort

0

Wenn die Taste wirklich ein Sprite ist, können Sie:

  • das Sprite zu einer Gruppe hinzufügen Buttons genannt.
  • Rendern Sie die Schaltflächen auf dem Bildschirm.
  • Verwenden Sie die Methode kill(), um das Sprite aus der Gruppe Buttons zu entfernen.
  • Rendern Sie den Bildschirm in der nächsten Runde neu.

http://pygame.org/docs/ref/sprite.html#pygame.sprite.Sprite.kill

0

Um etwas vom Bildschirm Sie etwas anderes über sie ziehen müssen zu entfernen. Die einfachste Antwort wäre also, den Button nicht mehr zu rendern und andere Sachen darüber rendern zu lassen.

Ein guter Weg, um es zu tun ist, dass alle sichtbaren Objekte erben pygame.sprite.Sprite und setzen Sie sie in sprite groups. Von hier aus können Sie einfach Sprites zeichnen, aktualisieren und entfernen.

Hier ist ein funktionierendes Beispiel. Drücken Sie die Tasten 1, 2 oder 3 machen die "Buttons" wieder erscheinen wieder:

import pygame 
pygame.init() 

screen = pygame.display.set_mode((200, 200)) 
clock = pygame.time.Clock() 


class Button(pygame.sprite.Sprite): 
    def __init__(self, pos, size=(32, 32), image=None): 
     super(Button, self).__init__() 
     if image is None: 
      self.rect = pygame.Rect(pos, size) 
      self.image = pygame.Surface(size) 
     else: 
      self.image = image 
      self.rect = image.get_rect(topleft=pos) 
     self.pressed = False 

    def update(self): 
     mouse_pos = pygame.mouse.get_pos() 
     mouse_clicked = pygame.mouse.get_pressed()[0] 
     if self.rect.collidepoint(*mouse_pos) and mouse_clicked: 
      print("BUTTON PRESSED!") 
      self.kill() # Will remove itself from all pygame groups. 

image = pygame.Surface((100, 40)) 
image.fill((255, 0, 0)) 
buttons = pygame.sprite.Group() 
buttons.add(
    Button(pos=(50, 25), image=image), 
    Button(pos=(50, 75), image=image), 
    Button(pos=(50, 125), image=image) 
) 

while True: 
    clock.tick(60) 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      quit() 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_1: 
       buttons.add(Button(pos=(50, 25), image=image)) 
      elif event.key == pygame.K_2: 
       buttons.add(Button(pos=(50, 75), image=image)) 
      elif event.key == pygame.K_3: 
       buttons.add(Button(pos=(50, 125), image=image)) 

    buttons.update() # Calls the update method on every sprite in the group. 

    screen.fill((0, 0, 0)) 
    buttons.draw(screen) # Draws all sprites to the given Surface. 
    pygame.display.update()