如何解决如何在pyinstaller中包含图片和音乐之类的资产
我使用pyinstaller来使文件成为exe,但是每次打开exe时,都会出现错误,提示Failed to execute main script
。我尝试了许多事情,并询问了其他人,得出结论,它没有确定资产。因此,如何获取它可以确定资产,以便使exe运行。
这是我的代码导入pygame
import random
import math
import time
from pygame import mixer
pygame.init()
#width,height
screen = pygame.display.set_mode((1000,800))
background = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\back.png")
mixer.music.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Song.mp3")
mixer.music.play(-1)
title = pygame.display.set_caption("Shoot Deannes")
icon = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Deanne GYypsu python.png")
pygame.display.set_icon(icon)
lov = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\lov.png")
show_image = False
playerImg = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Python Player.png")
playerX = 450
playerY = 580
playerX_change = 0
playerY_change = 0
enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
num_of_enemies = 5
for i in range(num_of_enemies):
enemyImg.append(pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Pygame Enemy D.png"))
enemyX.append(random.randint(0,935))
enemyY.append(random.randint(40,140))
enemyX_change.append(1.5)
enemyY_change.append(random.uniform(0.3,0.8))
bulletImg = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Shoot.png")
bulletX = 0
bulletY = 0
bulletX_change = 0
bulletY_change = 7
bullet_state = "ready"
score_value = 0
font = pygame.font.Font("freesansbold.ttf",32)
textx = 20
textY = 20
def show_score(x,y):
score = font.render("Landed shots :" + str(score_value),True,(255,192,203))
screen.blit(score,(x,y))
def player(x,y):
screen.blit(playerImg,y))
def enemy(x,y,i ):
screen.blit(enemyImg[i],y))
def fire_bullet(x,y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletImg,(x + 16,y + 10))
def isCollision(enemyX,enemyY,bulletX,bulletY):
distance = math.sqrt(math.pow(enemyX - bulletX,2)) + (math.pow(enemyY - bulletY,2))
if distance < 50:
return True
else:
return False
def isCollision2(enemyX,playerX,playerY):
distance = math.sqrt(math.pow(enemyX - playerX,2)) + (math.pow(enemyY - playerY,2))
if distance < 70:
return True
else:
return False
running = True
while running:
screen.fill((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:
playerX_change = -3.5
if event.key == pygame.K_RIGHT:
playerX_change = 3.5
if event.key == pygame.K_SPACE:
if bullet_state is "ready":
bullet_sound = mixer.sound(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\ORG.wav")
bullet_sound.play()
bulletX = playerX
bulletY = playerY
fire_bullet(bulletX,bulletY)
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerX_change = 0
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
playerY_change = 2.5
if event.key == pygame.K_UP:
playerY_change = -2.5
if event.type == pygame.KEYUP:
if event.key == pygame.K_DOWN or event.key == pygame.K_UP:
playerY_change = 0
playerX += playerX_change
playerY += playerY_change
if playerX <=0:
playerX = 0
elif playerX >=935:
playerX = 935
for i in range(num_of_enemies):
enemyX[i] += enemyX_change[i]
enemyY[i] += enemyY_change[i]
if enemyX[i] <=0:
enemyX_change[i] = 1.5
enemyY[i] += enemyY_change[i]
elif enemyX[i] >=935:
enemyX_change[i] = -1.5
enemyY[i] += enemyY_change[i]
collision = isCollision(enemyX[i],enemyY[i],bulletY)
if collision:
bulletY = 580
bullet_state = "ready"
score_value += 1
enemyX[i] = random.randint(0,1000)
enemyY[i] = random.randint(40,140)
collision2 = isCollision2(enemyX[i],playerY)
if collision2:
playerX = 4000
playerY = 4000
gameover_sound = mixer.sound(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\GAME OVER.wav")
gameover_sound.play()
show_image = True
if show_image:
pygame.display.set_mode((480,910)).blit(lov,0))
enemy(enemyX[i],i)
if bulletY <=0 :
bulletY =580
bullet_state = "ready"
if bullet_state is "fire":
fire_bullet(bulletX,bulletY)
bulletY -= bulletY_change
player(playerX,playerY)
show_score(textx,textY)
pygame.display.update()
这也是我第一次做这种事情,所以请不要介意我的笨拙。我已经将所有资产和这个称为main.py的文件放在同一文件夹中,而我无法成功地将其制作为exe。
解决方法
将资产与可执行文件放在同一文件夹中。 (或者,如果期望资产在子文件夹中,则将其放在此处)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。