【问题标题】:Pygame not checking keyevents after another happensPygame 在另一次发生后不检查键事件
【发布时间】:2016-06-12 19:01:01
【问题描述】:

我正在 x 轴上移动一个精灵。它正确地左右移动。当我同时按下 LEFT 和 RIGHT 时,它会停止正常移动。

当用户同时按下两个键然后放开一个键时,我试图做到这一点,以便它继续朝着仍然按下的方向移动。

奇怪的是,当我按住右边并放开左边时它会起作用。它继续向右移动。

当我按住左并点击右时,它会停止移动,直到我再次按右。

我评论了一些我必须完成这项工作的想法,但它们让我失望了。

我确信这是一个简单的修复或我的逻辑故障。

我已经为此工作了几个小时。

感谢您提前回复。

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()

【问题讨论】:

    标签: python python-2.7 pygame


    【解决方案1】:

    我想你需要的是这样的:

    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
    

    就是这样......希望它有所帮助。

    【讨论】:

    • 工作完美!非常感谢!
    【解决方案2】:

    尝试在你的动作中使用以下代码:

     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
    

    【讨论】:

    • 我添加了代码,它扭转了这种情况。现在另一个方向行不通了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多