2017-12-30 26 views
0

私はこの質問が重複とみなされることは知っていますが、私は自分のコードで何が間違っているのかを探し出して考え出しました。キーを押したままオブジェクトを移動するには?

while True: 
    keys = pygame.key.get_pressed() 
    if keys[pygame.K_LEFT]: 
     self.player.setLeftRight(-1 * self.PLAYERMOVERATE) 
    if keys[pygame.K_RIGHT]: 
     self.player.setLeftRight(self.PLAYERMOVERATE) 
+0

メソッド 'setLeftRight()'には何がありますか?たぶん問題があります。変数(つまり 'self.PLAYERMOVERATE'と' self.player.rect')に値を表示し、コードのどの部分が実行されたかの情報を表示するには 'print()'を使います。現在のコードはOKです。 – furas

+0

または、ある変数で位置を変更しても、別の変数を使用して新しい位置にプレーヤーを表示することができます。だから、 'print()'を使って、プレーヤーを表示するための変数に値を表示してください。 – furas

+0

setLeftRightメソッドには、1行のコードしか含まれていません。このメソッドは次のとおりです。def setLeftRight(self、pixels):self.rect.move_ip(pixels、0)。私はこの問題がここにないと確信しています。 –

答えて

0

I:

for event in pygame.event.get(): 

    if event.type == QUIT: 
     self.terminate() 

    if event.type == KEYDOWN: 
     if event.key == K_ESCAPE: 
      self.terminate() 
     if event.key == K_LEFT or event.key == K_a: 
      self.moveRight = False 
      self.moveLeft = True 
     if event.key == K_RIGHT or event.key == K_d: 
      self.moveLeft = False 
      self.moveRight = True 

    if event.type == KEYUP: 
     if event.key == K_LEFT or event.key == K_a: 
      self.moveLeft = False 
     if event.key == K_RIGHT or event.key == K_d: 
      self.moveRight = False 

# Move the player around 
if self.moveLeft : 
    # Moves the player object to left with self.PLAYERMOVERATE pixels. 
    self.player.setLeftRight(-1 * self.PLAYERMOVERATE) 


if self.moveRight : 
    self.player.setLeftRight(self.PLAYERMOVERATE) 

は、私もこの代替を試してみました:

私の問題は、左または右キーが押されているとき、私のオブジェクトと呼ばれるプレイヤーは、常に移動していないということです問題はあなたがメインのゲームループで入力を処理していないことだと考えてください。

あなたのコードでは、オブジェクトPlayerのメソッド内で入力を処理しているようです。これは入力の処理方法ではありません。 2番目のコード例では、ループがないことを意味するwhile True:ループがあるため、メソッドの実行は決して終了しません。私はあなたの最初の例で同様の問題があるかもしれないと思う。

代わりにあなたがする必要があります

  1. は、すべてのオブジェクトとクラスを作成します。

  2. メインゲームループを作成します。

ゲームのメインループは入力を処理し、ゲームのロジックを処理してレンダリングすべきものをレンダリングする必要があります。

ここに短いコード例があります。

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() # Exit from pygame window 
      quit() # End python thread 

     if event.type == KEYDOWN: 
      if event.key == K_LEFT or event.key == K_a: 
       player.moveRight = False 
       player.moveLeft = True 
      if event.key == K_RIGHT or event.key == K_d: 
       player.moveLeft = False 
       player.moveRight = True 

     if event.type == KEYUP: 
      if event.key == K_LEFT or event.key == K_a: 
       player.moveLeft = False 
      if event.key == K_RIGHT or event.key == K_d: 
       player.moveRight = False 


    # Move player using method 
    if player.moveLeft: 
     # Move player 
    # ... 


    # Render player 

これがあなたを助けてくれることを願っております。ご不明な点がございましたら、下記のコメント欄にお寄せください。

関連する問題