2016-06-16 5 views
-2

Ich möchte einige Sprites für mein Pygame über das Display bewegen. Es ist eine bestimmte Route und ich möchte sie mit Vektoren verschieben. So bekam ich die Positionen meiner Route und so bekam ich die Größe und die Überschrift. Sie können die Formeln sehen und wie ich die Art der Spritzer ändern möchte (mit "wenn"). Ich lege die Vektoren in Tupel und ich denke das ist nicht korrekt. Ich erhalte einen FehlerSprites verschieben nach Vektoren

TypeError: can't multiply sequence by non-int of type 'float' line 51

Ich denke, das ist die Art, wie ich die Tupel mutliply. Aber ich hoffe, dass Sie dahinter meine Idee und Sie können mir helfen,

clock = pygame.time.Clock() 

speed = 25. 
position = (30.0,50.0) 
magnitude = [509, 141, 128, 409, 293, 330, 251, 532] 
heading = [(0.7,0.73),(0.71,0.71),(0.78,0.63),(-0.52,0.65),(0.97,0.24),(0.58,-0.82),(-0.88,-0.48),(0.08,-0.99)] 





while True: 

for event in pygame.event.get(): 
    if event.type == QUIT: 
     exit() 

screen.blit(background, (0.0,0.0)) 
screen.blit(x1, position) 
screen.blit(x2, (300,30)) 
screen.blit(x3, (500,30)) 
screen.blit(x4,(800,30)) 

time_passed = clock.tick() 
time_passed_seconds = time_passed/1000.0 



route = time_passed_seconds * speed 
position += heading[0] * route 

if route >= magnitude[0]: 
    route = 0 
    route1 = time_passed_seconds * speed 
    position += heading[1] * route1 
    if route1 >= magnitude[1]: 
     route2 = time_passed_seconds * speed 
     position += heading[2] *route2 
     if route2 >= magnitude[2]: 
      route3 = time_passed_seconds * speed 
      position += heading[3] * route3 
      if route3 >= magnitude[3]: 
       route4 = time_passed_seconds * speed 
       position += heading[4] * route4 

Antwort

0

Sie wollen nicht Tupeln verwenden, wie Sie, dass Tupel gesehen habe kann nicht einfach mit einem Skalar multipliziert werden. (Multiplying a tuple by a scalar)

Es gibt Problemumgehungen, aber die einfachste Lösung wäre numpy, die die mathematischen Operationen unterstützt, die Sie versuchen, zu tun. Modellieren Sie einfach die Vektoren als numpy.array. Dann können Sie Ihre Berechnungen auf diese Weise tun:

import numpy 

clock = pygame.time.Clock() 

speed = 25. 
position = numpy.array((30.0,50.0)) 
magnitude = [509, 141, 128, 409, 293, 330, 251, 532] 
heading = numpy.array([(0.7,0.73),(0.71,0.71),(0.78,0.63),(-0.52,0.65),(0.97,0.24),(0.58,-0.82),(-0.88,-0.48),(0.08,-0.99)]) 

route = time_passed_seconds * speed 
position += heading[0] * route 

Ich nehme auch gemeint Sie heading[0] in der letzten Zeile, wie die ganze Liste hinzuzufügen scheint nicht sinnvoll zu sein.

+0

Vielen Dank für Ihre Antwort. Es funktionierte. Jetzt möchte ich den Kurs während der Bewegung ändern. Deshalb möchte ich if-Klauseln sagen, dass wenn route == Betrag [0]:/n Position + = Überschrift [1] * Geschwindigkeit – Skorab

+0

Die if-Klausel, die Sie in Ihrem Beispiel-Code haben, sollte ohne Änderungen funktionieren, also tat ich nicht schließe es in meine Antwort ein. Hast du es versucht? Sind Sie auf Fehler gestoßen? – Isa

+0

Nein, es ändert nicht die Richtung. Vielleicht, weil die Größenordnung nicht genau die berechnete Route ist? – Skorab