Seite 1 von 1

Abfrage Objekt erstellt

Verfasst: Mittwoch 20. Mai 2009, 23:22
von mayx
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()

Verfasst: Donnerstag 21. Mai 2009, 05:56
von 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.

Verfasst: Freitag 22. Mai 2009, 12:10
von mayx
Ja, genau nebenläufig ist es....
Einmal Pygame Update und einmal Touchscreen Update.
Pygame bewegt die Shots und Touchscreen initzialisiert neue Shots.

Verfasst: Sonntag 24. Mai 2009, 10:31
von mayx
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