Einam drücken wird mehrmals gezählt (Pygame)

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Hallo Community,

ich frage in meinem Spiel folgendermaßen ab ob ein gegner vom Spieler getroffen wird (mit der Waffe):

Code: Alles auswählen

if event.type == MOUSEBUTTONDOWN:
           point = pygame.mouse.get_pos()
           if self.rect.collidepoint(point):
               self.life = self.life - 50
das klappt auch. Zumindest im Prinzip. Den anscheinen wird jeder Schuss mehrmals gezählt. Denn nach einem Schuss sank die Gesundheit eines Gegners von 100 auf -250. In Etappen. ich lasse nach jedem Durchgang das Leben der Gegner mit print ausgeben, und so stellte ich fest dass das leben durchaus in 50iger Schritten gheruntergeht aber eben mehrmals pro Schuss.
Wisst ihr woran das liegt?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Weil MOUSEBUTTONDOWN immer dann gesendet wird, wenn eine Maustaste gedrückt ist. Und je nach dem wie hoch die zeitlilche Auflösung gewählt ist erhält man eine Menge an Ereignisse.
BlackJack

Die Frage ist, ob das Event nur einmal generiert wird, oder periodisch solange die Maustaste gedrückt ist. Wenn letzteres brauchst Du mehr Logik die dafür sorgt, dass nur abgezogen wird, wenn das Event das erste mal auftritt ohne dass ein entsprechendes "*UP"-Event zwischendurch auftrat.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Eigentlich dürfte es nur einmal gesendet werden, schließlich ist das bei KEYDOWN auch so (oh, wie hat michdas in den Wahnsinn getrieben).
BlackJack

Tja, es wird wirklich nur ein Event gesendet. Dann ist wahrscheinlich, wie üblich, mal wieder mit Deiner Programmlogik etwas nicht in Ordnung. Das kleinste Programm dass dieses Problem hat, und was ich glaube ich, schon einmal bei Dir gesehen habe:

Code: Alles auswählen

import pygame

pygame.init()
pygame.display.set_mode((320, 240))
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
    if event.type == pygame.MOUSEBUTTONDOWN:
        print 'down',
Egal ob das nun das Problem ist, was auch in Deinem Quelltext steckt, solltest Du erst weiter programmieren, wenn Du verstanden hast, warum das da oben endlos 'down' ausgibt, wenn man die Maustaste mal gedrückt hatte. Wenn Du das nicht verstehst, lass die Finger vom Programmieren und such Dir 'nen anderes Hobby. :P
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Sodele, das Problem ist aus der Welt.

@BlackJack: Bei deinem Programm wird nicht ewig 'down' ausgegeben wenn man einmal drückt, sondern nur solange man drückt.
Schön in die eigene Falle getappt :roll:
Aber letzten Endes muss ich mich bedanken, denn du hast mich auf den richtigen Weg gebracht.
Antworten