2016-06-12 23 views
0

我正在x軸上移動一個精靈。它正確地左右移動。當我同時按下LEFT和RIGHT時,它會停止正常移動。Pygame在另一個之後沒有檢查keyevents

我想讓用戶按下這兩個鍵然後放開一個,讓它繼續沿着仍然按下的方向移動。

奇怪的是,當我持有權利,並放棄離開時,它的作品。它繼續向右移動。

當我左手按住右鍵時,它會停止移動,直到我再次按右鍵。

我評論了一些想法,我不得不做這項工作,但他們失敗了我。

我相信它是我的一個簡單的修復或邏輯故障。

我在這工作了幾個小時。

感謝您提前回復。

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

相關問題