2017-11-09 9 views
0

私は画面の周りにものを移動しようとしています。パイゲームは簡単なテキスト入力用です。これは私のコードの非常に短いビットです:変数が意図せずに設定されています

import pygame 
pygame.init() 
sensitivity = 5 # How fast it moves 
rot=rot_speed = [0, 0] 
done=pause = False 
screen = pygame.display.set_mode((800, 450)) 
screen.fill((255,255,255)) 
pygame.display.flip() 
while not done: # ---------- Main program loop ---------- # 
    for event in pygame.event.get(): # If they pressed a key 
     if event.type == pygame.QUIT: # Did they click quit? 
      done = True 
     if event.type == pygame.KEYDOWN: # Has a key been pressed? 
      type_key = 1 
      print("SENSITIVITY", sensitivity, rot_speed,".", rot) 
      if event.key == pygame.K_w: # Up key pressed 
       rot_speed[1] = sensitivity*-1 
      if event.key == pygame.K_s: # Down key pressed 
       rot_speed[1] = sensitivity 
      if event.key == pygame.K_a: # Left key pressed 
       rot_speed[0] = sensitivity*-1 
      if event.key == pygame.K_d: # Right key pressed 
       rot_speed[0] = sensitivity 
      if event.key == pygame.K_SPACE: 
       if pause == False: 
        pause = True 
       else: 
        pause = False 
      print("KEYS", sensitivity, rot_speed,".", rot) 
    if pause == False: 
     print("rot_speed", rot_speed) 

私が午前問題は、私だけrot_speedを設定しようとすると、変数rotrot_speedが設定されていることです。何か案は?スピードがリストや個々の変数にないときはうまくいったが、私はコードをいくつかの方法で変更したかもしれない。変数の設定の前後にprintステートメントを置くと、それは非常に奇妙です。

+0

@VasilisG。忘れました - 各リストにはxが1でyが2つのアイテムが必要です –

+1

'rot = rot_speed = [0、0]'は両方の変数に同じリストを割り当てます。あなたはそこに '腐敗 'を割り当てています。 –

+0

あなたが 'rot'に割り当てたくなければ、その行*から' rot = 'を削除するだけです。 –

答えて

1

rot, rot_speed = [0, 0], [0, 0]を書き込んでください。これにより、rotrot_speedが別々の値に設定されます。現在、rot = rot_speed = [0, 0]があります。つまり、rotrot_speedへのポインタに設定しています。このため、rot_speedが変更された場合にのみ変更されます。

+0

よろしくお願いします!私はそれが私を許可するときに答えを受け入れるだろう! –

+0

私は二日目にびっくりしました。 –

+0

あなたは大歓迎です!このようなことは、私たちが最初にプログラミングを始めるとき、私たち全員にとって欲求不満です。 – hologram

2

あなたは両方の名前にリストオブジェクトを割り当て:これは、2つのコピーを割り当てられません

rot=rot_speed = [0, 0] 

。あなたは単に同じものを参照する2つの異なるラベルを持つだけです。 rot_speedへの任意の変異は、あまりにもrot経由で見ることができます:

>>> rot = rot_speed = [0, 0] 
>>> rot is rot_speed # they are the same object 
True 
>>> rot[0] = 42 # mutating the list 
>>> rot_speed # changes visible in both places 
[42, 0] 

は、2つの別々のリストを作成します。

rot = [0, 0] 
rot_speed = [0, 0] 

あなたはどのようにPythonの変数(名)仕事上に読むことをお勧めします。私は非常にNed BatchelderのFacts and myths about Python names and valuesをお勧めします。

関連する問題