最近我一直在开发一个游戏,我正在使用 pygbag 将其转换为 HTML,以便可以在网络浏览器上玩。当我构建 python 文件并运行它们时,游戏按预期运行。但是,当我在命令行中使用 pygbag 命令,然后转到
localhost:8000
(临时发布游戏的开发端口)时,音频可以工作,但我遇到了黑屏。我转到
localhost:8000#debug
,它会告诉我发生了什么错误,它给出了这个错误:
错误
它来自
import_assets()
类的
Player()
方法。有问题的方法是:
def import_assets(self):
self.animations = {}
for index, folder in enumerate(walk("graphics/player")):
print(index)
if index == 0:
for subfolder in folder[1]:
self.animations[subfolder] = []
else:
for file_name in folder[2]:
path = folder[0].replace("\\", "/") + "/" + file_name
surf = pygame.image.load(path).convert_alpha()
key = folder[0].split("\\")[1]
self.animations[key].append(surf)
该方法用于导入玩家的“左”、“右”、“下”、“上”面朝行走动画。总共有 4 个“组”,每个方向一个(R L U D),每个“组”包含 4 个行走动画帧。因此需要导入 16 个球员图像。单独导入所有 16 个图像会很乏味,因此我编写了一个函数来使用 for 循环来完成此操作。
walk()
函数是
os.walk()
所有图像都添加到 self.animations 变量中,该变量是一个字典。键为“上”、“下”、“左”和“右”,与键关联的值是包含该方向行走动画的每个帧的列表。
给出错误的行是倒数第二行:
key = folder[0].split("\\")[1]
只有当我在
localhost:8000
打开pygbag测试服务器时才会发生此错误。如果我在计算机上使用 Python 正常运行代码,则代码按预期工作得很好,并且不会发生错误。有人可以帮我解决这个问题吗?如果这个问题写错了,我深表歉意,这是我的第一个 StackOverflow 问题。
我尝试去 localhost:8000#debug 查看错误,并发现了之前给出的错误。我还尝试将所有类合并到一个 main.py 文件中,但这也不起作用。
这个错误信息表明你的代码中,路径分隔符出现了问题。在 Windows 系统中,路径分隔符是反斜杠
\
,而在 Web 环境中,路径分隔符是正斜杠
/
。
你的代码中使用
\
来分割路径,这在 Web 环境中会导致错误。你需要使用
os.path.join()
函数来拼接路径,这个函数会根据不同的操作系统自动使用正确的路径分隔符。
将以下代码:
key = folder[0].split("\\")[1]
替换为:
key = os.path.basename(folder[0])
这样就可以在不同的平台上正确地获取文件夹名称了。
完整的代码:
import os
import pygame
def import_assets(self):
self.animations = {}
for index, folder in enumerate(os.walk("graphics/player")):
print(index)
if index == 0:
for subfolder in folder[1]:
self.animations[subfolder] = []
else:
for file_name in folder[2]:
path = os.path.join(folder[0], file_name)
surf = pygame.image.load(path).convert_alpha()
key = os.path.basename(folder[0])
self.animations[key].append(surf)
此外,建议在整个代码中使用
os.path.join()
函数来拼接路径,避免类似的问题再次出现。