2016-06-12 2 views
0

x軸にスプライトを移動しています。それは正しく左右に動いています。左と右の両方を同時に押すと、正しく動きが止まります。Pygameがキーイベントをチェックしていないときに発生します。

私はユーザーが両方のキーを押してから1つのキーを離したときにそれを作ろうとしていますが、まだ押された方向に移動を続けるためです。

私は右を保持し、左に行かせている間、奇妙なことに動作します。それは右に移動し続けます。

私が左を保持して右にタップすると、右にもう一度押すまで動きません。

私はこの仕事をしなければならなかったいくつかのアイデアをコメントしましたが、私は失敗しました。

私はその部分で簡単な修正や論理的な失敗があると確信しています。

私はこれについて数時間働いています。

お返事ありがとうございます。

import pygame 
import time 
import random 
import sys 
import math 

pygame.init() 

displayWidth = 1200 
displayHeight = 800 
white = (255,255,255) 
black = (0,0,0) 

gameDisplay = pygame.display.set_mode((displayWidth, displayHeight)) 
pygame.display.set_caption('Game 3') 
clock = pygame.time.Clock() 


class firstSquare: 

    def __init__(self,player_x,player_y): 

     self.x = player_x 
     self.y = player_y 
     self.width = 100 
     self.height = 100 

    def render(self): 

     pygame.draw.rect(gameDisplay, white,(self.x, self.y, self.width, self.height)) 

class secondSquare: 

    def __init__(self,cpu_x,cpu_y): 

     self.x = cpu_x 
     self.y = cpu_y 
     self.width = 100 
     self.height = 100 

    def render(self): 

     pygame.draw.rect(gameDisplay, white,(self.x, self.y, self.width, self.height)) 


player = firstSquare(300,300) 
cpu = secondSquare(100,100) 


def gameLoop(): 

### variables## 
    player_x = 100 
    player_y = 100 
    x = 100 
    y = 100 
    movement_x = 0 
    movement_y = 0 
    frame_rate = 0 
    frame_table = 0 

    inGame = True 



    while inGame: 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       inGame = False 
       pygame.quit() 
       sys.exit() 

      keyPressed= pygame.key.get_pressed() 

#### this is moving the player on x-axis## 

      if keyPressed[pygame.K_LEFT]: 
       movement_x = -5 
      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_LEFT: 
        movement_x = 0 
      if keyPressed[pygame.K_RIGHT]: 
       movement_x = 5 
      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_RIGHT: 
        movement_x = 0 
### two keys at once won't move the player### 

      if keyPressed[pygame.K_LEFT] and keyPressed[pygame.K_RIGHT]: 
       movement_x = 0 

### pressing one key and letting go the other will continue movement 

##   if keyPressed[pygame.K_LEFT] and keyPressed[pygame.K_RIGHT]: 
##    if event.type == pygame.KEYUP: 
##     if event.key == pygame.K_LEFT: 
##      movement_x = 5 
##      print("left dropped") 
##   if keyPressed[pygame.K_RIGHT] and keyPressed[pygame.K_LEFT]: 
##    if event.type == pygame.KEYUP: 
##     if event.key == pygame.K_RIGHT: 
##      movement_x = -5 
##      print("Right dropped") 












     gameDisplay.fill(black) 
     player.render() 
     cpu.render() 
     player.x += movement_x 
     pygame.display.update() 
     clock.tick(60) 


gameLoop() 
pygame.quit() 
quit() 

答えて

0

私は何が必要だと思う。このです:

if keyPressed[pygame.K_LEFT]: 
    movement_x = -5 
if event.type == pygame.KEYUP: 
    if event.key == pygame.K_LEFT and movement_x < 0: 
     movement_x = 0 
if keyPressed[pygame.K_RIGHT]: 
    movement_x = 5 
if event.type == pygame.KEYUP: 
    if event.key == pygame.K_RIGHT and movement_x > 0: 
     movement_x = 0 

そして、それはそれだろう...それがお役に立てば幸い。

+1

完璧に機能しました!どうもありがとうございます! – bworley90

0

あなたの動きに次のコードを使用してみてください:

if keyPressed[pygame.K_LEFT]: 
       movement_x = -5 
      elif keyPressed[pygame.K_RIGHT]: 
       movement_x = +5 
      elif event.type == pygame.KEYUP: 
       if event.key == pygame.K_LEFT: 
        movement_x = 0 
      elif event.type == pygame.KEYUP: 
       if event.key == pygame.K_RIGHT: 
        movement_x = 0 
+0

コードを追加して、状況を逆転させました。もう一方の方向はうまくいきません。 – bworley90

関連する問題