Python Pygame:Can';添加主菜单功能后,不能移动播放器
我还在用Pygame做一个游戏。我已经开始玩游戏了,我只想做一个主菜单功能,这样当按下按钮时,游戏就开始了 当我在主菜单中添加并编辑游戏循环时,我无法移动玩家精灵,当我按下“X退出”按钮时,游戏也不会关闭(这是不负责任的(以前没有发生过)) 这本来并没有发生 而且没有追踪 这是我的密码:Python Pygame:Can';添加主菜单功能后,不能移动播放器,python,pygame,Python,Pygame,我还在用Pygame做一个游戏。我已经开始玩游戏了,我只想做一个主菜单功能,这样当按下按钮时,游戏就开始了 当我在主菜单中添加并编辑游戏循环时,我无法移动玩家精灵,当我按下“X退出”按钮时,游戏也不会关闭(这是不负责任的(以前没有发生过)) 这本来并没有发生 而且没有追踪 这是我的密码: import pygame import time import itertools import os pygame.init() SCREENWIDTH = 1000 SCREENHEIGHT = 650
import pygame
import time
import itertools
import os
pygame.init()
SCREENWIDTH = 1000
SCREENHEIGHT = 650
screen = pygame.display.set_mode([SCREENWIDTH, SCREENHEIGHT])
screen.fill((255, 123, 67))
screen.blit(pygame.image.load("Backgrounds/mainmenu.png"), (0, 0))
background = screen.copy()
clock = pygame.time.Clock()
mi_level = False
class Player(pygame.sprite.Sprite):
sprite = pygame.image.load("Sprites/lee.png")
def __init__(self, *groups):
super().__init__(*groups)
self.image = Player.sprite
self.rect = self.image.get_rect(topleft=(445, 550))
self.pos = pygame.Vector2(self.rect.center)
self.lives = 50
self.score = 0
self.hitbox = self.rect.inflate(-20, -30)
def update(self):
self.pos = self.rect.center
key = pygame.key.get_pressed()
dist = 3
if key[pygame.K_DOWN]:
self.rect.y += dist
self.hitbox.y += dist
elif key[pygame.K_UP]:
self.rect.y -= dist
self.hitbox.y -= dist
if key[pygame.K_RIGHT]:
self.rect.x += dist
self.hitbox.x += dist
elif key[pygame.K_LEFT]:
self.rect.x -= dist
self.hitbox.x -= dist
if self.rect.right > SCREENWIDTH:
self.rect.right = SCREENWIDTH
if self.rect.left < 0:
self.rect.left = 0
if self.rect.bottom > SCREENHEIGHT:
self.rect.bottom = SCREENHEIGHT
if self.rect.top < 50:
self.rect.top = 50
self.hitbox.center = self.pos
if self.lives <= 0:
screen.blit(pygame.image.load("gameover.png"), (0,0))
pygame.display.flip()
time.sleep(5)
os._exit(0)
pygame.quit()
stageon = False
sprites = pygame.sprite.Group()
player = Player(sprites)
def main():
running = True
mi_level = False
screen.blit(pygame.image.load("Backgrounds/mainmenu.png"), (0, 0))
pygame.display.update()
while True:
for events in pygame.event.get():
if events.type == pygame.QUIT or running == False:
time.sleep(1)
running = False
pygame.quit()
return
pygame.draw.rect(screen, (255, 204, 204), (690, 110, 700, 135), 0)
if pygame.mouse.get_pressed()[0] and pygame.Rect(690, 110, 880, 165).collidepoint(pygame.mouse.get_pos()):
screen.fill((255, 123, 67))
screen.blit(pygame.image.load("Backgrounds/mi_level.png"), (0, 50))
pygame.display.flip
background = screen.copy()
mi_level = True
pygame.display.update()
while mi_level:
sprites.update()
screen.blit(background, (0, 0))
sprites.draw(screen)
pygame.display.update()
clock.tick(100)
if mi_level == False:
return
if events.type == pygame.QUIT or running == False:
time.sleep(1)
running = False
pygame.quit()
return
if __name__ == '__main__':
main()
导入pygame
导入时间
进口itertools
导入操作系统
pygame.init()
屏幕宽度=1000
屏幕高度=650
screen=pygame.display.set_模式([屏幕宽度,屏幕高度])
屏幕填充((255、123、67))
blit(pygame.image.load(“Backgrounds/mainmenu.png”),(0,0))
background=screen.copy()
clock=pygame.time.clock()
mi_级别=错误
职业玩家(pygame.sprite.sprite):
sprite=pygame.image.load(“Sprites/lee.png”)
定义初始化(自我,*组):
超级()
self.image=Player.sprite
self.rect=self.image.get_rect(左上方=(44550))
self.pos=pygame.Vector2(self.rect.center)
self.lifes=50
self.score=0
self.hitbox=自校正充气(-20,-30)
def更新(自我):
self.pos=self.rect.center
key=pygame.key.get_pressed()
距离=3
如果键[pygame.K_DOWN]:
自校正y+=距离
self.hitbox.y+=dist
elif key[pygame.K_UP]:
自整y-=距离
self.hitbox.y-=距离
如果键[pygame.K_RIGHT]:
self.rect.x+=dist
self.hitbox.x+=dist
elif键[pygame.K_左]:
自校正x-=距离
self.hitbox.x-=距离
如果self.rect.right>屏幕宽度:
self.rect.right=屏幕宽度
如果self.rect.left<0:
self.rect.left=0
如果self.rect.bottom>屏幕高度:
self.rect.bottom=屏幕高度
如果self.rect.top<50:
self.rect.top=50
self.hitbox.center=self.pos
如果self.lifes已经有一个游戏循环。不需要“嵌套”游戏循环:
而mi_级别:
一个简单的if
语句,用于计算游戏是否开始:
如果mi_级别:
# []...]
注意,在内部循环中的代码中,没有对事件求值,因为缺少。这导致不再处理pygame.QUIT
事件,并且窗口没有按预期关闭和响应
请参见对主循环的更改:
def main():
运行=真
mi_级别=错误
blit(pygame.image.load(“Backgrounds/mainmenu.png”),(0,0))
pygame.display.update()
尽管如此:
对于pygame.event.get()中的事件:
如果events.type==pygame.QUIT或running==False:
时间。睡眠(1)
运行=错误
pygame.quit()
返回
pygame.draw.rect(屏幕,(255、204、204)、(690、110、700、135)、0)
如果pygame.mouse.get_按下()
屏幕填充((255、123、67))
blit(pygame.image.load(“Backgrounds/mi_level.png”),(0,50))
pygame.display.flip()
background=screen.copy()
mi_级别=真
如果mi_级别:
sprites.update()
屏幕光点(背景,(0,0))
精灵。绘制(屏幕)
pygame.display.update()
时钟滴答(100)
pygame.display.update()