Pygame运行缓慢

我正在创建一个名为“生存岛”的游戏,并且刚刚创建了开始屏幕。pygame在执行事件后滞后太多(需要时间进行响应)。

这是我的源代码:

#packages

import 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.Rectcollidepoint

if pygame.Rect(415,190,70,30).collidepoint(mousex, mousey):

参见示例:

#packages

import 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

回到顶部