Pygame运行缓慢
我正在创建一个名为“生存岛”的游戏,并且刚刚创建了开始屏幕。pygame在执行事件后滞后太多(需要时间进行响应)。
这是我的源代码:
#packagesimport pygame
import sys
from sys import exit
#initialization
pygame.init()
#display surf
width = 600
height = 400
surface = pygame.display.set_mode((width,height))
clock = pygame.time.Clock()#for fps
#caption
pygame.display.set_caption('Survival Island')
#variables
mousex = 0
mousey = 0
#booleans
play = True #entered playmode
canQuitOnStart = True #game can be quitted on start
drawStartScreen = True #start screen drawed
running = True # game is running
#definitions
def quitOnStart(): #quitting the game
#can be seen if rect is drawn [pygame.draw.rect(surface,(0,0,255),(550,350,40,40))]
global mousex,mousey,running
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN: #quit on pressing x on start screen
if mousex > 550 and mousey > 350 and mousex <590 and mousey <390:
print('Exit1')
running = False
def drawStart(): #drawing start menu
START_Image = pygame.image.load('START_Image.png').convert()
surface.blit(START_Image,(0,0))
pygame.display.update()
def playGame():
#play on clicking on "play"
global mousex,mousey,canQuitOnStart,drawStartScreen
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
if mousex > 415 and mousey >190 and mousex <70 and mousey <30: # can be seen if rect is drawn [pygame.draw.rect(surface,(0,0,255),(415,190,70,30))]
canQuitOnStart = False
drawStartScreen = False
screen.fill((0,0,0))
pygame.display.update()
if drawStartScreen == True:
drawStart()
def main():
if play == True:
playGame()
if canQuitOnStart == True:
quitOnStart()
#main loop
while running:
#get mouse position
mousex,mousey = pygame.mouse.get_pos()
# fps is 60
clock.tick(120)
# quit button event
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# main function
if __name__ == '__main__':
main()
pygame.quit()#quits after event
运行后,pygame窗口显示图像。运行后需要多次尝试关闭窗口(右下角的“ X”)
我是一个新手程序员,所以..我想做一些pygame课程(请提出一些建议)。
谢谢 !!!
回答:
游戏运行缓慢,因为您START_Image
在每一帧中都加载。pygame.image.load
这是非常昂贵的操作,因为它必须从数据存储中读取图像。START_Image
在启动时加载一次
surface = pygame.display.set_mode((width,height))clock = pygame.time.Clock()#for fps
#caption
pygame.display.set_caption('Survival Island')
START_Image = pygame.image.load('START_Image.png').convert()
pygame.display.update()
在主应用程序循环中不要多次调用。pygame.display.update()
从队列中删除事件,因此每个事件仅获得一次。一次获取事件列表(events
= pygame.event.get()),然后将事件列表传递给函数:
while running: # [...]
events = pygame.event.get()
for event in events:
# [...]
if play == True:
playGame(events)
if canQuitOnStart == True:
quitOnStart(events)
此外,在应用程序循环中绘制场景,而不是事件循环中。pygame.display.update()
绘制整个场景后单做1个就足够了。
按钮单击条件错误。它一定要是:
if mousex> 550 and mousey > 350 and mousex <590 and mousey <390:
if 415 < mousex < 415+70 and 190 < mousey < 190+30:
无论如何,我建议使用pygame.Rect
和collidepoint
:
if pygame.Rect(415,190,70,30).collidepoint(mousex, mousey):
参见示例:
#packagesimport pygame
import sys
from sys import exit
#initialization
pygame.init()
#display surf
width = 600
height = 400
surface = pygame.display.set_mode((width,height))
clock = pygame.time.Clock()#for fps
#caption
pygame.display.set_caption('Survival Island')
START_Image = pygame.image.load('START_Image.png').convert()
#variables
mousex = 0
mousey = 0
#booleans
play = True #entered playmode
canQuitOnStart = True #game can be quitted on start
drawStartScreen = True #start screen drawed
running = True # game is running
#definitions
def quitOnStart(events): #quitting the game
#can be seen if rect is drawn [pygame.draw.rect(surface,(0,0,255),(550,350,40,40))]
global mousex,mousey,running
for event in events:
if event.type == pygame.MOUSEBUTTONDOWN: #quit on pressing x on start screen
if mousex > 550 and mousey > 350 and mousex <590 and mousey <390:
print('Exit1')
running = False
def drawStart(): #drawing start menu
surface.blit(START_Image,(0,0))
def playGame(events):
#play on clicking on "play"
global mousex,mousey,canQuitOnStart,drawStartScreen
for event in events:
if event.type == pygame.MOUSEBUTTONDOWN:
if pygame.Rect(415,190,70,30).collidepoint(mousex, mousey): # can be seen if rect is drawn [pygame.draw.rect(surface,(0,0,255),(415,190,70,30))]
canQuitOnStart = False
drawStartScreen = False
surface.fill((0,0,0))
if drawStartScreen == True:
drawStart()
#pygame.draw.rect(surface, (255, 0, 0), (415,190,70,30))
pygame.display.update()
def main():
global canQuitOnStart, play, running, mousex, mousey
#main loop
while running:
#get mouse position
mousex,mousey = pygame.mouse.get_pos()
# fps is 60
clock.tick(120)
# quit button event
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
running = False
# main function
if play == True:
playGame(events)
if canQuitOnStart == True:
quitOnStart(events)
if __name__ == '__main__':
main()
以上是 Pygame运行缓慢 的全部内容, 来源链接: utcz.com/qa/413244.html