python - 即使我不按侧键,我的宇宙飞船也会继续移动
问题描述
import pygame
#initialize the screen
pygame.init()
#create the screen
screen = pygame.display.set_mode((800, 700))
#tile and icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load("spaceship.png")
pygame.display.set_icon(icon)
#Player
playerImg = pygame.image.load("player.png")
playerx = 370
playery = 600
playerx_change = 0.39
def player(x,y):
screen.blit(playerImg, (x,y))
running = True
while running:
screen.fill((0,0,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
#keystroke
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerx_change = -0.39
if event.key== pygame.K_RIGHT:
playerx_change = 0.39
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.type == pygame.K_RIGHT:
playerx_change = 0
playerx += playerx_change
player(playerx,playery)
pygame.display.update()
即使我不按侧键,我的宇宙飞船也会继续移动。我正在使用 python 和 pygame 创建太空入侵者。根据代码,这艘船不会停止。我使用的是 Visual Studio 2019 的社区版。
解决方案
您的代码中有错字,event.key == pygame.K_RIGHT
而不是event.type == pygame.K_RIGHT
.
此外,还有一个缩进问题:
running = True
while running:
# [...]
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
#keystroke
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerx_change = -0.39
if event.key== pygame.K_RIGHT:
playerx_change = 0.39
#<--| INDENTATION
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerx_change = 0
无论如何,我建议使用pygame.key.get_pressed()
而不是运动的关键事件:
running = True
while running:
screen.fill((0,0,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
playerx -= 0.39
if keys[pygame.K_RIGHT]:
playerx += 0.39
player(playerx,playery)
pygame.display.update()
按键事件KEYDOWN
和KEYUP
分别在按键被释放时发生一次,但返回的状态pygame.key.get_pressed()
是True
只要按键被按住。
推荐阅读
- java - 如何为执行异常编写测试
- pdflib - PDFlib - 使用文档页面保存自定义元数据?
- amazon-web-services - 调用端点 url 时未找到 AWS API Gateway 404 页面错误
- java - 无法让 findAll 在 Elasticsearch 中工作
- asp.net-core - 如何将 IdentityDbContext 与两个数据库相关联?
- opengl - glRotatef 是否也会旋转法线方向?
- c++ - 如何在不使用 GAC 的情况下使 C++/CLI DLL 解决对托管程序集 (DLL) 的依赖?
- c# - 无法将文件“DefaultConnection.mdf”附加为数据库“DefaultConnection”(将 MySQL 与 ASP.NET 一起使用)
- java - 如何从文件中的句子创建随机字符串轮换?
- intellij-idea - 如何防止格式化程序在分号后添加换行符?