python-3.x - 我希望我的播放器在按下按钮时移动
问题描述
因此,当我只在一侧进行运动时,它可以工作,但是一旦我完成所有运动,它就不起作用了。我试图切换数字、命令,但没有用。我是一个初学者,我的技能不太好,因为我之前使用过教程。我想自己做一些事情,而不是使用教程,所以我决定问问题
import pygame
import sys
from pygame.locals import *
clock = pygame.time.Clock()
pygame.init()
pygame.display.set_caption("Neverout")
player = pygame.image.load("player.png")
green = (181, 231, 29)
WINDOW_SIZE = (800, 800)
screen = pygame.display.set_mode(WINDOW_SIZE, 0, 32)
player_pos = [385, 50]
up = False #So here I have my movement variables
down = False
right = False
left = False
while True:
screen.blit(player, player_pos)
#Here i check if my movement variable are true after I press them
if left is True:
player_pos[0] -= 5
if right is True:
player_pos[0] += 5
if up is True:
player_pos[1] -= 5
if down is True:
player_pos[1] += 5
for event in pygame.event.get():
#here i check if the button is pressed
if event.type == KEYDOWN:
if pygame.K_LEFT:
left = True
if pygame.K_RIGHT:
right = True
if pygame.K_UP:
up = True
if pygame.K_DOWN:
down = True
#Here I check if a button is not pressed
if event.type == KEYUP:
if pygame.K_LEFT:
left = False
if pygame.K_RIGHT:
right = False
if pygame.K_UP:
up = False
if pygame.K_DOWN:
down = False
#Checks for quiting the app
if event.type == QUIT:
pygame.quit()
sys.exit()
#No dates only updates
pygame.display.update()
screen.fill(green)
clock.tick(60)
解决方案
你的代码几乎是正确的,它只是错误地检查了事件。您需要检查event.key
等于您检查的键码。
现有的代码只是说:
if pygame.K_LEFT:
但这pygame.K_LEFT
只是一个数字,就像说if 27:
永远为真一样。
只需event.key
在其中添加即可修复它:
if event.key == pygame.K_LEFT:
Also don't forget to use elif
(else if), as it's more efficient. If the key event is, say LEFT, it can't be RIGHT too, so there's no need to check any other codes. You can skip checking them with if .. elif
.
Applying these fixes to your main loop makes the player move OK:
for event in pygame.event.get():
#here i check if the button is pressed
if event.type == KEYDOWN:
if event.key == pygame.K_LEFT:
left = True
elif event.key == pygame.K_RIGHT:
right = True
elif event.key == pygame.K_UP:
up = True
elif event.key == pygame.K_DOWN:
down = True
#Here I check if a button is not pressed
elif event.type == KEYUP:
if event.key == pygame.K_LEFT:
left = False
elif event.key == pygame.K_RIGHT:
right = False
elif event.key == pygame.K_UP:
up = False
elif event.key == pygame.K_DOWN:
down = False
#Checks for quiting the app
elif event.type == QUIT:
pygame.quit()
sys.exit()
推荐阅读
- javascript - 如何使用 Next.js 检查自定义服务器中是否存在页面
- c++ - 在 QLabel 中显示视频
- python - PyTorch - 自定义 ReLU 平方实现
- linux - 使用 FOR 循环时出现奇怪的问题,这里是脚本中的文档
- amazon-s3 - Logstash 当前日期 logstash.conf 作为 backup_add_prefix(s3 输入插件)
- javascript - 检查时差是否小于1秒
- php - 如何将 base64 数据嵌入到 Laravel 6 电子邮件中
- javascript - 克隆后如何禁用原始删除按钮也为 id 文本框自动递增
- node.js - 节点可以在多个线程中运行吗?
- xml - 从包含多个值的行中获取值