2016-06-16 10 views
-2

私は自分のPygameのスプライトをディスプレイ上に移動したいと思っています。その与えられたルートと私はベクトルでそれらを移動したい。だから私は私のルートの位置を得たので、私は大きさと見出しを得た。数式と私がどのようにスピリットの方法を変更したいのかを見ることができます(「if」を使って)。私はベクトルをタプルに入れて、それは正しくないと思う。エラーが発生するベクトルでスプライトを移動する

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

私はタプルをmutliplyする方法だと思います。しかし、私はあなたがこの背後に私のアイデアを得る願っていますし、あなたは私の

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 

答えて

0

を助けることができるあなたはタプルは単にスカラで乗算することができないことを見てきたように、タプルを使用する必要はありません。 (Cf. Multiplying a tuple by a scalar

解決策がありますが、最も簡単な解決策は、実行しようとしている数学的操作をサポートするnumpyを使用することです。単にベクトルをnumpy.arrayとしてモデル化するだけです。次に、あなたの計算をこの方法で行うことができます。

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 

私はまた、あなたが意味をなすようには見えません全体のリストを追加すると、最後の行にheading[0]を意味想定しています。

+0

ありがとうございます。出来た。今私は動きの間に見出しを変えたいと思う。したがって、if節は、route == magnitude [0]ならば:/ n position + = heading [1] * speed – Skorab

+0

あなたのサンプルコードでif節を変更しなくても動作するはずですので、私の答えにそれを含めてください。あなたはそれを試しましたか?何かエラーが発生しましたか? – Isa

+0

いいえ、方向は変わりません。おそらく、その大きさが正確に計算されたルートではないからでしょうか? – Skorab

関連する問題