微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

K_SPACE 无响应

如何解决K_SPACE 无响应

我正在编写我的第一个 pygame 脚本,但 K_SPACE 事件不起作用。运行脚本时,按下空格键时不会发生任何事情。我已将 K_SPACE 更改为 K_LEFT 和 K_LSHIFT 并且它们工作得非常好,所以我认为错误不在于代码本身?

输入位于代码的中间,但我想将其全部包含在内,以确保没有上述问题导致它。 有什么想法吗?

import pygame
import random
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load('spaceship.png')
pygame.display.set_icon(icon)
background = pygame.image.load('space.jpg')

playerImg = pygame.image.load('battleship.png')
playerX = 370
playerY = 480
playerX_change = 0

enemy1Img = pygame.image.load('alien.png')
enemy1X = random.randint(0,800)
enemy1Y = random.randint(50,150)
enemy1X_change = 0.1
enemy1Y_change = 40

laserImg = pygame.image.load('laser.png')
laserX = 0
laserY = 480
laserX_change = 0
laserY_change = 0.5
laser_state = "ready"


def player(x,y):
 screen.blit(playerImg,(playerX,playerY))
def enemy1(x,y):
 screen.blit(enemy1Img,(enemy1X,enemy1Y))
def fire_laser(x,y):
 global laser_state
 laser_state = "fire"
 screen.blit(laserImg,(x+30,y+10))

running = True
while running:

 screen.fill((0,0))
 screen.blit(background,(0,0))

 for event in pygame.event.get():
     if event.type == pygame.QUIT:
         running = False

 if event.type == pygame.KEYDOWN:
     if event.key == pygame.K_LEFT:
         playerX_change = -0.1
     elif event.key == pygame.K_RIGHT:
         playerX_change = 0.1
     elif event.key == pygame.K_SPACE:
         if laser_state == 'ready':
             laserX = playerX
             fire_laser(laserX,laserY)

 if event.type == pygame.KEYUP:
     if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
         playerX_change = 0



 playerX += playerX_change
 if playerX <= 0:
     playerX = 0
 if playerX >= 736:
     playerX = 736

 enemy1X += enemy1X_change
 if enemy1X <= 0:
     enemy1X_change = 0.1
     enemy1Y += enemy1Y_change
 elif enemy1X >= 736:
     enemy1X_change = -0.1
     enemy1Y += enemy1Y_change

 if laserY <= 0:
     laserY = 480
     laser_state = 'ready'
 if laser_state == "fire":
     fire_laser(laserX,laserY)
     laserY -= laserY_change

 player(playerX,playerY)
 enemy1(enemy1X,enemy1Y)
 pygame.display.update()

解决方法

我可以用你的原始代码重现这个问题。

这是Indentation的问题。您必须处理事件循环中的事件,而不是在事件循环之后。

在事件循环中移动事件处理:

running = True
while running:

    screen.fill((0,0))
    screen.blit(background,(0,0))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # INDENTATION
    #-->| 

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -0.1
            elif event.key == pygame.K_RIGHT:
                playerX_change = 0.1
            elif event.key == pygame.K_SPACE:
                if laser_state == 'ready':
                    laserX = playerX
                    fire_laser(laserX,laserY)

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。