Abfrage Objekt erstellt

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
mayx
User
Beiträge: 71
Registriert: Sonntag 3. Mai 2009, 02:51

Hey,

ich hab mal PyMike s GeoStrike an unseren Touchscreen gekoppelt.
Das rockt, bei jeder Bewegung mit den Finger wird das Raumschiff bewegt und ein Schuß abgegeben.

Scheinbar sind es aber zu viele Signale vom Touchscreen oder so.
Es erscheint nämlich manchmal die Fehlermeldung: AttributeError: 'Shot' object has no attribute 'vx'

Ich geh jetzt mal davon aus, das die update funktion aufgerufen wird, aber der Schuß noch nicht mit __init__ durch ist. Wie kann ich in der Update abfragen, ob es self.vx schon gibt? "if self.vx:" geht leider nicht ;(

Code: Alles auswählen

SHOT_POINTS = [(0, -7), (-2, 7), (0, 4), (2, 7)]
class Shot(VectorObject):
    def __init__(self, pos, offset=0, speedoffset=0):
        VectorObject.__init__(self, points=SHOT_POINTS, pos=pos)
        self.move(offset, 5)
        self.vx = speedoffset
    def update(self):
        self.move(self.vx, -14)
        if self.pos[1] <= 0:
            self.kill()
BlackJack

Wenn man so eine Abfrage machen muss, stimmt IMHO etwas mit dem Entwurf nicht. Man sollte nicht abfragen ob es das (nicht) gibt, sondern dafür sorgen *dass* es das Attribut gibt. Das kann ja nur passieren wenn das Programm nebenläufig arbeitet, und da muss man dann halt bei den sensiblen Stellen mit "locking" arbeiten.
mayx
User
Beiträge: 71
Registriert: Sonntag 3. Mai 2009, 02:51

Ja, genau nebenläufig ist es....
Einmal Pygame Update und einmal Touchscreen Update.
Pygame bewegt die Shots und Touchscreen initzialisiert neue Shots.
mayx
User
Beiträge: 71
Registriert: Sonntag 3. Mai 2009, 02:51

Hab es jetzt so geändert, dass immer vor dem Pygame-Update ein neuer Schuß generiert, wenn Touchscreen-Update aufgerufen wird. Das funktioniert ;) Cool. Danke
Antworten