2016-05-10 5 views
1

2つのスプライトを含むゲームループ内で1つのスプライトだけを移動しようとしています。私はを、Bit.update()の方法に含めたので、wを押すとspr1.y -= 60が表示されます。言い換えれば、wを押すと、spr1だけが移動されることを期待して、スプライトはselfに割り当てられます。しかし、現在のコードでは、wを押すと、spr1spr2の両方が移動します。更新方法でspr1のみを参照して更新するにはどうすればよいですか?ゲームループ内の個々のスプライトを更新する

class Bit(games.Sprite): 
    def update(self): 
     if games.keyboard.is_pressed(games.K_w): 
      self = spr1 
      self.y -= 60 

def main(): 
    spr1_image = games.load_image("spr1.png") 
    spr1 = Bit(image = spr1_image, 
       x = games.screen.width/10, 
       y = games.screen.height/10) 

    spr2_image = games.load_image("spr2.png") 
    spr2 = Bit(image = spr2_image, 
       x = games.screen.width * 9/10, 
       y = games.screen.height * 9/10) 

    games.screen.add(spr1) 
    games.screen.add(spr2) 

    games.screen.mainloop() 

main() 
+0

それはあなたがやろうとしているかは明らかではありません。とにかく各インスタンスはそれ自身を参照します。 'self.y'を呼び出すことは、' update'が呼び出されるインスタンスに対してのみ作用します。 –

+0

wを押すと、両方のスプライトが移動します。私は、wを押すとspr1だけを動かすようにプログラムを書こうとしています。 – Astrophe

答えて

0

編集 は2つのスプライトは異なる動作を持っているので、あなたは彼らのために別のクラスを必要としています。

  1. Bitには、self=spr1行を取り除くとOKです。 update()では、selfは、現在のスプライトが - spr1またはspr2であれば何でも構いません。 main
  2. 、それはgames.Spriteがすでに提供していないことをすべての行動を必要としない、キーボードに応答する必要はありませんspr2ので

    spr2 = games.Sprite(image = spr2_image, # <---- changed class 
         x = games.screen.width * 9/10, 
         y = games.screen.height * 9/10) 
    

    spr2を変更します。したがって、Bitを使用する必要はありません。

(警告:私はlivewiresを使用していないので、私は:)何かを明らかに不足していることもある)

+0

私はあなたがしたことを理解しています。分かりやすくするために私のコードを簡略化しました。実際のプログラムには数十のスプライトがあり、私はそれぞれのクラスを書くのを避けることを望んでいます。私は単一のスプライトを動かすために(self = spr1のような)何らかの方法が欲しいです。 – Astrophe

+0

より良い方法があるかどうかは、コードをどのように構造化したかによって異なります。この質問を完全に変えるのではなく、あなたのスプライトのユースケースの詳細について、このトピックにリンクして別の質問を追加してください。どのスプライトを移動するかを決める方法を含めてください。たとえば、特定の時点で、単一のスプライトが「アクティブスプライト」であるという概念がありますか?ありがとう! – cxw

関連する問題