【发布时间】:2021-04-10 15:15:58
【问题描述】:
我开始在我的游戏中对键盘按键进行编程,其想法是,对于每个按下的按钮,玩家都会发出声音,一切正常,但由于某种原因,在我对按键进行编程后,游戏屏幕会停止关闭,如果我按X屏幕不关闭,有时它会关闭但在我按X几次后 问题
import pygame
from Obj import Obj
from Spritesheet import Spritesheet
class Draw:
def __init__(self):
pygame.mixer.init()
self.up_sound = pygame.mixer.Sound('/home/julio/PycharmProjects/Test/Assets/Sounds/a.ogg')
self.down_sound = pygame.mixer.Sound('/home/julio/PycharmProjects/Test/Assets/Sounds/o.ogg')
self.right_sound = pygame.mixer.Sound('/home/julio/PycharmProjects/Test/Assets/Sounds/i -.ogg')
self.left_sound = pygame.mixer.Sound('/home/julio/PycharmProjects/Test/Assets/Sounds/u.ogg')
self.all_sprites = pygame.sprite.Group()
self.my_sprite = Spritesheet('/home/julio/PycharmProjects/Test/Assets/sprites1.png')
self.up = False
self.down = False
self.left = False
self.right = False
self.idle = False
self.go = True
self.bg = Obj('/home/julio/PycharmProjects/Test/Assets/bg.png', 0, 0, self.all_sprites)
self.sprite1_1 = self.my_sprite.get_sprite(0, 54, 405, 400)
self.sprite1 = pygame.transform.scale(self.sprite1_1, (355, 358))
self.sprite2_2 = self.my_sprite.get_sprite(0, 2134, 405, 408) # 405, 408
self.sprite2 = pygame.transform.scale(self.sprite2_2, (355, 358))
self.sprite3_3 = self.my_sprite.get_sprite(4065, 2118, 405, 408)
self.sprite3 = pygame.transform.scale(self.sprite3_3, (355, 358))
self.sprite4_4 = self.my_sprite.get_sprite(0, 3159, 405, 408)
self.sprite4 = pygame.transform.scale(self.sprite4_4, (355, 358))
self.sprite5_5 = self.my_sprite.get_sprite(9, 2654, 405, 408)
self.sprite5 = pygame.transform.scale(self.sprite5_5, (355, 358))
self.x = 100
self.y = 100
self.tick = 0
def ticks(self):
self.tick += 1
if self.tick == 60:
self.tick = 0
self.go = True
def prit(self, janela):
self.all_sprites.draw(janela)
def move(self):
for evento in pygame.event.get():
if evento.type == pygame.KEYDOWN:
if evento.key == pygame.K_UP:
self.up = True
self.down = False
self.left = False
self.right = False
self.up_sound.play()
if evento.key == pygame.K_DOWN:
self.down = True
self.left = False
self.right = False
self.up = False
self.down_sound.play()
if evento.key == pygame.K_LEFT:
self.up = False
self.down = False
self.left = True
self.right = False
self.left_sound.play()
if evento.key == pygame.K_RIGHT:
self.up = False
self.down = False
self.left = False
self.right = True
self.right_sound.play()
if evento.type == pygame.KEYUP:
if evento.key == pygame.K_DOWN:
self.down = False
if evento.key == pygame.K_UP:
self.up = False
if evento.key == pygame.K_LEFT:
self.left = False
if evento.key == pygame.K_RIGHT:
self.right = False
def chek(self):
if not self.up and not self.down and not self.left and not self.right:
self.idle = True
else:
self.idle = False
def draw(self):
self.all_sprites.update()
self.move()
self.chek()
主代码
import pygame
from Draw import Draw
class Main:
def __init__(self):
pygame.init()
self.janela = pygame.display.set_mode([600, 600])
pygame.display.set_caption('Test????')
self.loop = True
self.Draw = Draw()
self.fps = pygame.time.Clock()
def event(self):
for event in self.Draw.event_list:
if event.type == pygame.QUIT:
print('Quit')
self.loop = False
def draw(self):
self.Draw.prit(self.janela)
self.Draw.draw()
if self.Draw.down:
self.janela.blit(self.Draw.sprite3, (self.Draw.x, self.Draw.y))
if self.Draw.right:
self.janela.blit(self.Draw.sprite4, (self.Draw.x, self.Draw.y))
if self.Draw.left:
self.janela.blit(self.Draw.sprite5, (self.Draw.x, self.Draw.y))
if self.Draw.up:
self.janela.blit(self.Draw.sprite2, (self.Draw.x, self.Draw.y))
if self.Draw.idle:
self.janela.blit(self.Draw.sprite1, (self.Draw.x, self.Draw.y))
def update(self):
while self.loop:
self.event()
self.draw()
self.fps.tick(60)
# print(self.fps)
pygame.display.update()
pass
Main().update()
【问题讨论】:
-
pygame.QUITevent 发生了什么?你有多个事件循环吗?见Faster version of 'pygame.event.get()'. Why are events being missed and why are the events delayed? -
您的情况可能不同,但问题是一样的。你有多个事件循环并且你多次调用
pygame.event.get()。这会导致一些事件丢失。如果不查看“主”存档中的代码,几乎不可能提供帮助。 -
好的,现在我添加代码
标签: python python-3.x pygame