Python 3.x Pygame代码非常慢,尽管进行了所有故障排除

Python 3.x Pygame代码非常慢,尽管进行了所有故障排除,python-3.x,macos,pygame,Python 3.x,Macos,Pygame,因此,我从pygame简介教程中编写了这个游戏,添加了菜单和所有内容来修改它。每当我在我的MBP17上运行游戏时,它运行得非常慢。我在谷歌上搜索了一下,尝试了所有的解决方案,但都没有成功。而且,在我的event.unicode中输入的效果非常糟糕,我必须多次按同一个键才能注册。感谢您的帮助 import sys import pygame import random import math import mysql.connector as mysql import pygame_textinp

因此,我从pygame简介教程中编写了这个游戏,添加了菜单和所有内容来修改它。每当我在我的MBP17上运行游戏时,它运行得非常慢。我在谷歌上搜索了一下,尝试了所有的解决方案,但都没有成功。而且,在我的event.unicode中输入的效果非常糟糕,我必须多次按同一个键才能注册。感谢您的帮助

import sys
import pygame
import random
import math
import mysql.connector as mysql
import pygame_textinput

pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Die Alien Die')

#database requirements
msql = mysql.connect(user='root', password='7014403396', database='gamer')
cursor = msql.cursor()

#background
background = pygame.image.load('back.png').convert()
pygame.mixer.music.load('y2mate.com - Star Wars_ Sith Battle Theme Music_XS4_5xlA3Ls_320kbps.mp3')
pygame.mixer.music.play(-1)
clock = pygame.time.Clock()
#millenium falcom
playerimg = pygame.image.load('mfc.png')
playerX = 350
playerY = 480
dx = 0
dy = 0

#alien die
alienimg = []
alienX =[]
alienY =[]
adx = []
ady = []
no_of_aliens = 8
for i in range(no_of_aliens):
    alienimg.append(pygame.image.load('spaceship.png'))
    alienX.append(random.randint(0,735))
    alienY.append(random.randint(50,250))
    adx.append(0.3)
    ady.append(random.randint(20,43))

#bullets
bulletimg = pygame.image.load('bullet.png')
bulletX = 0
bulletY = 480
bdx = 0
bdy = 1
visibility = False

score = 0
font=pygame.font.Font('freesansbold.ttf',32)
font2 = pygame.font.Font('freesansbold.ttf',25)
font3 = pygame.font.Font('freesansbold.ttf',22)

# Game Over
over_font = pygame.font.Font('freesansbold.ttf', 64)



click = False
def EnterUser():
    texty = ''
    global click
    while True:
        screen.fill((255, 255, 255))
        textinput = pygame_textinput.TextInput()
        events = pygame.event.get()
        textinput.update(events)
        screen.blit(textinput.get_surface(), (50, 150))
        buttong = pygame.Rect(50, 330, 200, 50)
        mx, my = pygame.mouse.get_pos()
        pygame.draw.rect(screen, (255, 0, 0), buttong)


        draw_text('enter username', font, (0, 0, 0), screen, 20, 20)
        draw_text("Press Enter", font2, (0, 0, 0), screen, 50, 200)
        draw_text("If you leave username blank", font2, (0, 0, 0), screen, 50, 250)
        draw_text("your score wont register", font2, (0, 0, 0), screen, 50, 280)
        text_surface = font.render(texty, True, (0,0,0))
        screen.blit(text_surface, (50, 150))
        draw_text('Lets Go', font2, (0, 0, 0), screen, 52, 340)
        if buttong.collidepoint((mx, my)):
            if click:
                main_menu()




        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                texty += event.unicode
                if event.key == pygame.K_BACKSPACE:
                    texty = texty[:-1]
                if event.key == pygame.K_ESCAPE:
                    pygame.quit()
                if event.type == pygame.K_RETURN:
                    main_menu()
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    click = True
        pygame.display.update()



def draw_text(text, font, color, surface, x, y):
    textobj = font.render(text, 1, color)
    textrect = textobj.get_rect()
    textrect.topleft = (x, y)
    surface.blit(textobj, textrect)

def player(x, y):
    screen.blit(playerimg, (x, y))

def alien(x,y,i):
    screen.blit(alienimg[i],(x,y))

def shoot(x,y):
    global visibility
    visibility = True
    screen.blit(bulletimg,(x+25,y+10))

def collide(bulletX,bulletY,alienX,alienY):
    distance = math.sqrt(math.pow(alienX-bulletX,2)+math.pow(alienY-bulletY,2))
    if distance < 27:
        return True
    else:
        return False

def showscore(x,y):
    sscore=font.render('Score: '+str(score),True,(141,27,31))
    screen.blit(sscore,(x,y))

def game_over_text():
    over_text = over_font.render("GAME OVER", True, (255, 255, 255))
    screen.blit(over_text, (200, 250))
    fscore = score
    save_score()

def save_score():
    t = "INSERT INTO alien VALUES('{}', '{}')".format(texty, str(score))
    #val = (texty, str(score))
    cursor.execute(t)
    msql.commit()

#def show_high():

def main_menu():
    while True:
        screen.fill((0, 0, 0))
        draw_text('Main Menu', font, (255, 255, 255), screen, 20, 20)

        mx, my = pygame.mouse.get_pos()

        button_1 = pygame.Rect(50, 100, 200, 50)
        button_2 = pygame.Rect(50, 200, 200, 50)


        if button_1.collidepoint((mx, my)):
            if click:
                game()
        if button_2.collidepoint((mx, my)):
            if click:
                options()
        pygame.draw.rect(screen, (255, 0, 0), button_1)
        pygame.draw.rect(screen, (255, 0, 0), button_2)
        draw_text('Alien Destroyer', font2, (0,0,0), screen, 52, 110)
        draw_text('Show high scores', font3, (0,0,0), screen, 52, 206)
        draw_text('for Alien Destroyer', font3, (0,0,0), screen, 52, 230)

        click = False
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    pygame.quit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    click = True

        pygame.display.update()

# game loop
def game():
    global dx
    global dy
    global adx
    global ady
    global bdx
    global bdy
    global playerY
    global playerX
    global alienX
    global alienY
    global bulletY
    global bulletX
    global visibility
    global score
    running = True
    while running:
        clock.tick(60)
        screen.fill((0, 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:
                    dx = -1
                if event.key == pygame.K_RIGHT:
                    dx = 1
                if event.key == pygame.K_SPACE:
                    pygame.mixer.music.load('laser.wav')
                    pygame.mixer.music.play()
                    bulletX = playerX
                    shoot(bulletX, bulletY)

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    dx = 0
        playerX += dx
        if playerX <= 0:
            playerX = 0
        elif playerX >= 736:
            playerX = 736

        for i in range(no_of_aliens):
            if alienY[i] > 440:
                for j in range(no_of_aliens):
                    alienY[j] = 2000
                game_over_text()
                break
            alienX[i] += adx[i]
            if alienX[i] <= 0:
                adx[i] = 0.3
                alienY[i] += ady[i]
            elif alienX[i] >= 736:
                adx[i] = -0.3
                alienY[i] += ady[i]
            death = collide(bulletX, bulletY, alienX[i], alienY[i])
            if death:
                pygame.mixer.music.load('explosion.wav')
                pygame.mixer.music.play()
                bulletY = 480
                visibility = False
                score += 1
                alienX[i] = random.randint(0, 735)
                alienY[i] = random.randint(30, 130)
            alien(alienX[i], alienY[i], i)


        if bulletY <= 0:
            bulletY = 480
            visibility = False
        if visibility is True:
            shoot(bulletX, bulletY)
            bulletY -= bdy

        showscore(10, 10)
        player(playerX, playerY)


        pygame.display.update()

EnterUser()
导入系统 导入pygame 随机输入 输入数学 将mysql.connector作为mysql导入 导入pygame_文本输入 pygame.init() screen=pygame.display.set_模式((800600)) pygame.display.set_标题('死亡外星人死亡') #数据库要求 msql=mysql.connect(用户='root',密码='7014403396',数据库='gamer') cursor=msql.cursor() #背景 background=pygame.image.load('back.png').convert() pygame.mixer.music.load('y2mate.com-starwars\usith战斗主题音乐\uxs4\u5xla3ls\u320kbps.mp3') pygame.mixer.music.play(-1) clock=pygame.time.clock() #千年隼 playerimg=pygame.image.load('mfc.png') playerX=350 playerY=480 dx=0 dy=0 #外星人死亡 alienimg=[] alienX=[] alienY=[] adx=[] ady=[] 没有外星人=8 对于范围内的i(无外星人): alienimg.append(pygame.image.load('spaceship.png')) alienX.append(random.randint(0735)) alienY.append(random.randint(50250)) adx.append(0.3) ady.append(random.randint(20,43)) #子弹 bulletimg=pygame.image.load('bullet.png') bulletX=0 bulletY=480 bdx=0 bdy=1 可见性=错误 分数=0 font=pygame.font.font('freesansbold.ttf',32) font2=pygame.font.font('freesansbold.ttf',25) font3=pygame.font.font('freesansbold.ttf',22) #游戏结束 over_font=pygame.font.font('freesansbold.ttf',64) 单击=False def EnterUser(): texty='' 全局单击 尽管如此: 屏幕填充((255、255、255)) textinput=pygame\u textinput.textinput() events=pygame.event.get() textinput.update(事件) blit(textinput.get_surface(),(50150)) 按钮=pygame.Rect(5033020050) mx,my=pygame.mouse.get_pos() pygame.draw.rect(屏幕,(255,0,0),按钮) 绘制文本('输入用户名',字体,(0,0,0),屏幕,20,20) 绘制文字(“按回车键”,字体2,(0,0,0),屏幕,50,200) 绘制文本(“如果您将用户名留空”,font2,(0,0,0),屏幕,50250) 绘制文本(“你的分数不会注册”,font2,(0,0,0),屏幕,50280) text_surface=font.render(texty,True,(0,0,0)) 屏幕。blit(文本表面,(50,150)) 绘制文本(“放手”,字体2,(0,0,0),屏幕,52340) 如果按钮碰撞点((mx,my)): 如果单击: 主菜单() 对于pygame.event.get()中的事件: 如果event.type==pygame.QUIT: pygame.quit() sys.exit() 如果event.type==pygame.KEYDOWN: texty+=event.unicode 如果event.key==pygame.K_退格: texty=texty[:-1] 如果event.key==pygame.K_退出: pygame.quit() 如果event.type==pygame.K_返回: 主菜单() 如果event.type==pygame.MOUSEBUTTONDOWN: 如果event.button==1: 单击=真 pygame.display.update() def绘制文字(文字、字体、颜色、表面、x、y): textobj=font.render(文本,1,颜色) textrect=textobj.get_rect() textrect.topleft=(x,y) surface.blit(textobj,textrect) def播放器(x,y): 屏幕光点(playerimg,(x,y)) def外星人(x,y,i): 屏幕光点(alienimg[i],(x,y)) def喷射(x,y): 全球能见度 可见性=真 屏幕光点(项目符号,(x+25,y+10)) def碰撞(bulletX、bulletY、alienX、alienY): 距离=math.sqrt(math.pow(alienX-bulletX,2)+math.pow(alienY-bulletY,2)) 如果距离小于27: 返回真值 其他: 返回错误 def显示分数(x,y): sscore=font.render('Score:'+str(Score),True,(141,27,31)) 屏幕光点(sscore,(x,y)) def game_over_text(): over_text=over_font.render(“游戏结束”,True,(255,255,255)) 屏幕。blit(超过文本(200250)) 分数 保存分数() def save_score(): t=“插入外来值('{}','{}')”。格式(texty,str(score)) #val=(文本,str(分数)) cursor.execute(t) 提交() #def显示_高() def主菜单(): 尽管如此: 屏幕填充((0,0,0)) 绘制文本(“主菜单”,字体,(255,255,255),屏幕,20,20) mx,my=pygame.mouse.get_pos() button_1=pygame.Rect(5010020050) 按钮2=pygame.Rect(5020020050) 如果按钮_1.碰撞点((mx,my)): 如果单击: 游戏() 如果按钮_2.碰撞点((mx,my)): 如果单击: 选项() pygame.draw.rect(屏幕,(255,0,0),按钮1) pygame.draw.rect(屏幕,(255,0,0),按钮2) 绘制文字(“外星人驱逐舰”,font2,(0,0,0),屏幕,52110) 绘制文本(“显示高分”,font3,(0,0,0),屏幕,52206) 绘制文字('外星毁灭者',font3,(0,0,0),屏幕,52230) 单击=False 对于pygame.event.get()中的事件: 如果event.type==pygame.QUIT: pygame.quit() sys.exit() 如果event.type==pygame.KEYDOWN: 如果event.key==pygame.K_退出: pygame.quit() 如果event.type==pygame.MOUSEBUTTONDOWN: 如果event.button==1: 单击=真 pygame.display.update() #游戏循环 def game(): 全局dx 全球dy 全球adx 全球ady 全球bdx 全球bdy 全球游戏 全球playerX 全球阿利恩克斯 全球alienY 全球快报 全球简报 全球能见度 全球得分 运行=真 运行时: 时钟滴答(60) 屏幕填充((0,0,0)) 屏幕。blit(背景)(0,0
def game:
    while running:
        #omitted code
        events = pygame.event.get()
        for event in events:
             #...