python - pygame左右移动问题

标签 python python-2.7 pygame 2d

我已经开始在 pygame 上制作一些东西,但是在向左或向右移动时遇到了问题。如果我快速从按右箭头键改为按左箭头键,同时松开右箭头键,则 block 就会停止移动。这是我的代码

bg = "sky.jpg"
ms = "ms.png"
import pygame, sys
from pygame.locals import *
x,y = 0,0
movex,movey=0,0
pygame.init()
screen=pygame.display.set_mode((664,385),0,32)
background=pygame.image.load(bg).convert()
mouse_c=pygame.image.load(ms).convert_alpha()
m = 0
pygame.event.pump() 
while 1:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type==KEYDOWN:
            if event.key==K_LEFT:
                movex =-0.5
                m = m + 1
            if event.key==K_RIGHT:
                movex=+0.5
                m = m + 1
        elif event.type == KEYUP:
            if event.key==K_LEFT and not event.key==K_RIGHT:
                    movex = 0
            if event.key==K_RIGHT and not event.key==K_LEFT:
                    movex =0

    x+=movex
    y=200
    screen.blit(background, (0,0))
    screen.blit(mouse_c,(x,y))
    pygame.display.update()

有没有办法可以改变这个,这样如果按下右箭头键并释放左箭头键,它就会向右移动而不是停止? 附言 我仍在学习 pygame,对该模块非常陌生。如果这看起来是一个愚蠢的问题,我很抱歉,但我找不到任何答案。

最佳答案

你的问题是,当你测试 KEYDOWN 事件时

if event.key==K_LEFT and not event.key==K_RIGHT:

你总是得到True,因为当event.key==K_LEFT为True时, 它也始终是not event.key==K_RIGHT(因为事件的键毕竟是K_LEFT)。

我解决这类问题的方法是分开 来自行动的意图。所以,对于关键 事件,我只是简单地跟踪什么行动 应该会发生,像这样:

moveLeft = False
moveRight = False

while True:
  for event in pygame.event.get():
    if event.type == QUIT:
      pygame.quit()
      sys.exit()
    if event.type == KEYDOWN:
      if event.key == K_LEFT:  moveLeft  = True
      if event.key == K_RIGHT: moveRight = True
    elif event.type == KEYUP:
      if event.key == K_LEFT:  moveLeft  = False
      if event.key == K_RIGHT: moveRight = False

然后,在循环的“主要”部分,您可以 根据输入采取行动,例如:

while True:
  for event in pygame.event.get():
    ...
  if moveLeft  : x -= 0.5
  if moveRight : x += 0.5

关于python - pygame左右移动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910100/

相关文章:

python : Apply distributive law to elements in list

python - 如何检测 Pygame 中的两个图像是否接触?

python - 如何在 pygame 中生成多个敌人

python - 在Python中合并两个数据框

python - Spark java.lang.VerifyError

python - TensorFlow 对象检测 API 错误

python-2.7 - pocketsphinx-python 缺少声学模型定义 (mdef)

python - 为什么我在没有释放按键的情况下收到 Pygame KEYUP 事件?

python - OpenCV 找到正确的阈值来确定图像匹配与否与匹配分数

python - 放置请求 python Flask