Python Rechtecke bewegen?
Hallo,
ich habe in meinem Programm eine Liste von 400 Objekten, die mit pygame als Rechtecke gezeichnet werden.
Nun kann ich diese Objekte bewegen, indem ich klicke und die Maus bewege. Die x und y Koordinaten der Objekte werden also jedes Mal, wenn ich klicke und die Maus bewege, aktualisiert.
object.x = object.xinit + deltax
object.y = object.yinit + deltay
Das funktioniert. Das Problem dabei ist allerdings, dass das langsam ist und es daher zu Verzögerungen kommt. Wenn ich die Maus bewege, "hinken" die Rechtecke ein wenig hinterher.
Wie kann ich es machen, dass sich die Rechtecke bzw. die Objekte möglichst synchron mit der Maus mitbewegen?
Danke im Voraus
- Wieso brauchst du so viele Objekte?
- Die Objekte folgen nur der Maus, es werden nur die Koordinaten berechnet?
Alle 400 Rechtecke haben eigene Werte (Farbe usw.), die geändert werden können. Deshalb dachte ich, dass es am besten wäre, wenn jedes ein Objekt ist, dem man Werte geben kann.
1 Antwort
400 Objekte sind Pipifax. Mache mal ein Profil der Main-Loop, dann siehst Du, wo im Programm die Zeit verbraten wird.
Profiling geht etwa so:
Statt
if __name__ == '__main__':
myApp.mainloop() # Dieser Teil dauert zu lange?
schreibe
if __name__ == '__main__':
from cProfile import Profile
from pstats import Stats
profiler = Profile()
profiler.enable() ### P R O F I L E S T A R T
myApp.mainloop() # Dieser Teil wird gemessen.
profiler.disable() ### P R O F I L E S T O P !
stats = Stats(profiler, stream=file('myProfile.txt', 'w'))
stats.strip_dirs()
stats.sort_stats('cumulative', 'time')
stats.print_stats()
stats.print_callers()
stats.print_callees()
Nach dem Lauf liegt eine Datei myProfile.txt im Arbeitsverzeichnis, in der Du nach den teuren Methoden suchen kannst.