当我想使用pyinstaller打包我的python脚本时,如果我想使用";pygame.font.SysFont“;在我的剧本里?
我用pygame软件包制作了我的简单游戏,它在我的python编辑器上运行良好当我想使用pyinstaller打包我的python脚本时,如果我想使用";pygame.font.SysFont“;在我的剧本里?,python,pygame,pyinstaller,Python,Pygame,Pyinstaller,我用pygame软件包制作了我的简单游戏,它在我的python编辑器上运行良好 因此,我尝试通过pyinstaller 结果,EXE文件成功构建。但是当我执行这个文件时,这个文件在打开后立即关闭 因此,我尝试调试脚本,最终发现问题出在pygame.font.SysFont 当我没有使用pygame.font.SysFont并通过pyinstaller打包此脚本时,我可以成功地玩我的游戏 但是,如果我尝试在脚本中至少使用一次pygame.font.SysFont,并通过pyinstaller打包此
因此,我尝试通过pyinstaller
结果,EXE文件成功构建。但是当我执行这个文件时,这个文件在打开后立即关闭 因此,我尝试调试脚本,最终发现问题出在
pygame.font.SysFont
当我没有使用
pygame.font.SysFont
并通过pyinstaller打包此脚本时,我可以成功地玩我的游戏但是,如果我尝试在脚本中至少使用一次
pygame.font.SysFont
,并通过pyinstaller打包此脚本,我将无法玩游戏,因为此文件(pyinstaller的exe输出文件)在打开后立即关闭
如果有人知道这个问题,请告诉我多谢各位
import sys
import os
import random
import pygame as pg
from pygame.locals import QUIT, Rect, KEYDOWN, K_SPACE, K_r
def main():
game_over = False
ship_y = 250
velocity = 0
score = 0
slope = random.randint(1, 6)
walls = 160
holes = []
for xpos in range(walls):
holes.append(Rect(xpos * 5, 100, 5, 400))
parent_path = os.getcwd()
ship_img = pg.image.load(os.path.join(parent_path, "img\\ship.png"))
bang_img = pg.image.load(os.path.join(parent_path, "img\\bang.png"))
while True:
space_down = False
for event in pg.event.get():
if event.type == QUIT:
pg.quit()
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_SPACE:
space_down = True
if not game_over:
score += 10
velocity += -3 if space_down else 3
ship_y += velocity
# Scroll map automatically
edge = holes[-1].copy()
test = edge.move(0, slope)
if test.top <= 0 or test.bottom >= 600:
slope = random.randint(1, 6) * (-1 if slope > 0 else 1)
if edge.height >= 160:
edge.inflate_ip(0, -20)
edge.move_ip(5, slope)
holes.append(edge)
del holes[0]
holes = [x.move(-5, 0) for x in holes]
# Check crash
if holes[0].top > ship_y or holes[0].bottom < ship_y + 50:
game_over = True
SURFACE.fill((0, 255, 0))
for hole in holes:
pg.draw.rect(SURFACE, (0, 0, 0), hole)
SURFACE.blit(ship_img, (0, ship_y))
score_board = SYSFONT.render(f"score : {score}", True, (0, 0, 225)) # I have to comment out this line
SURFACE.blit(score_board, (600, 20))
if game_over:
end_msg = SYSFONT.render(f"press R to restart", True, (255, 255, 255)) # I have to comment out this line
cal_level = int((400 - holes[0].height) / 20)
level = SYSFONT.render(f"level : {cal_level}", True, (255, 0, 0)) # I have to comment out this line
SURFACE.blit(end_msg, (320, 200))
SURFACE.blit(level, (370, 240))
SURFACE.blit(bang_img, (0, ship_y - 40))
pg.display.update()
while True:
for event in pg.event.get():
if event.type == KEYDOWN:
if event.key == K_r:
game_over = False
if not game_over:
ship_y = 250
velocity = 0
score = 0
slope = random.randint(1, 6)
holes = []
for xpos in range(walls):
holes.append(Rect(xpos * 5, 100, 5, 400))
break
pg.display.update()
FPS.tick(30)
if __name__ == "__main__":
pg.init()
pg.key.set_repeat(5, 5)
SURFACE = pg.display.set_mode((800, 600))
FPS = pg.time.Clock()
SYSFONT = pg.font.SysFont(None, 36) # I have to comment out this line
main()
导入系统
导入操作系统
随机输入
导入pygame作为pg
从pygame.locals导入QUIT、Rect、KEYDOWN、K_SPACE、K_r
def main():
游戏结束=错误
船舶y=250
速度=0
分数=0
斜率=random.randint(1,6)
墙=160
孔=[]
对于范围内的XPO(墙壁):
孔。追加(Rect(xpos*5100400))
parent_path=os.getcwd()
ship\u img=pg.image.load(os.path.join(父路径,“img\\ship.png”))
bang\u img=pg.image.load(os.path.join(父路径,“img\\bang.png”))
尽管如此:
空格向下=假
对于pg.event.get()中的事件:
如果event.type==退出:
第页退出
sys.exit()
elif event.type==KEYDOWN:
如果event.key==K_空间:
空格向下=真
如果游戏没有结束:
分数+=10
速度+=-3如果空间向下,则为3
船舶y+=速度
#自动滚动地图
边=孔[-1]。复制()
测试=边缘移动(0,坡度)
如果test.top=600:
斜率=random.randint(1,6)*(-1,如果斜率大于0,则为-1,否则为1)
如果edge.height>=160:
边缘。充气(0,-20)
边缘移动(5,坡度)
孔。追加(边)
德尔洞[0]
孔=[x.move(-5,0)表示孔中的x]
#检查碰撞
如果孔[0]。顶部>装运y或孔[0]。底部<装运y+50:
游戏结束=正确
表面填充((0,255,0))
对于孔中孔:
pg.draw.rect(表面,(0,0,0),孔)
水面浮标(船模,(0,船模)
score_board=SYSFONT.render(f“score:{score}”,True,(0,0,225))#我必须注释掉这一行
表面。blit(划线板,(600,20))
如果游戏结束:
end_msg=SYSFONT.render(f“按R重新启动”,True,(255,255,255))#我必须注释掉这一行
校准等级=整数((400-孔[0]。高度)/20)
level=SYSFONT.render(f“level:{calu level}”,True,(255,0,0))35;我必须注释掉这一行
表面。布利特(端部(320200))
表面浮力(标高(370240))
水面闪电(砰的一声,(0,船y-40))
pg.display.update()
尽管如此:
对于pg.event.get()中的事件:
如果event.type==KEYDOWN:
如果event.key==K\u r:
游戏结束=错误
如果游戏没有结束:
船舶y=250
速度=0
分数=0
斜率=random.randint(1,6)
孔=[]
对于范围内的XPO(墙壁):
孔。追加(Rect(xpos*5100400))
打破
pg.display.update()
FPS.勾选(30)
如果名称=“\uuuuu main\uuuuuuuu”:
第init页()
pg.key.set_重复(5,5)
表面=pg.display.set_模式((800600))
FPS=pg.time.Clock()
SYSFONT=pg.font.SYSFONT(无,36)#我必须注释掉这一行
main()
我自己找到了解决方案
问题是
pygame.font.SysFont(None,36,bold=True)
pyinstaller在pygame中找不到默认的系统字体
因此,我指定了Calibri这样的字体类型,在这之后它工作得很好编译时打开窗口,查看控制台中的错误消息。如果它说它有任何丢失的文件或模块,您必须将它们复制为数据文件或隐藏导入