首页 > 编程问答 >使用 pygbag 将 pygame 游戏导出到网络时出现奇怪的错误

使用 pygbag 将 pygame 游戏导出到网络时出现奇怪的错误

时间:2024-07-23 13:36:33浏览次数:12  
标签:python pygame pygbag

最近我一直在开发一个游戏,我正在使用 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() 函数来拼接路径,避免类似的问题再次出现。

标签:python,pygame,pygbag
From: 78781637

相关文章

  • python-input键盘输入
     str=input("请输入:")#用户键盘输入#str表示一个字符串类型的变量,input会将读取到的字符串放入str中print(str) aa='请输入:'str=input(aa)#用户键盘输入#str表示一个字符串类型的变量,input会将读取到的字符串放入str中print(str)      ......
  • Python从0到100(四十五):从字符串到前后端分离
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • Python的运算符与条件表达式
    一、运算符Python数据是通过使用运算符来进行操作的,与数学运算符类似,主要运用于数字计算,比较大小和逻辑运算。Python中的运算符主要包括算术运算符、赋值运算符、比较运算符、逻辑运算符和位运算符。1.算术运算符算术运算符用在数字表达式中,作用和在数学中是一样的。Python......
  • 在尝试使用 docker 运行基于 pythonnet 的项目时,找不到 C# 运行时
    屏幕截图我不断收到此错误:RuntimeError:Failedtocreateadefault.NETruntime,whichwouldhavebeen"mono"onthissystem.Eitherinstallacompatibleruntimeorconfigureitexplicitlyvia......
  • Python 在模块中使用变量
    如何将一个文件中声明的变量调用到另一个文件中?大家好我已经在file1中声明了我的变量。我的函数位于file2中,它使用该变量。如何调用主文件中声明的变量。提前致谢当然可以!以下是如何在Python中跨文件使用变量:file1.py(包含变量的文件)#在file1.p......
  • Python 类型提示和 linter
    我一直在向我们的python项目添加静态类型检查,例如像这样:fromtypingimportListfromsomethingimportMyOtherClassclassMyClass:def__init__(self)->None:self.some_var=None#type:List[MyOtherClass]但是,现在我们使用的linter(flake8和......
  • eclipse如何写python程序
    本文主要介绍在Windows系统环境下,搭建能在Eclipse中运行python程序的环境。一、Eclipse下载与安装:Eclipse是写JAVA的IDE,下载地址为:http://www.eclipse.org/downloads/下载安装,网上教程很多,不赘述。二、pydev插件下载与安装:启动Eclipse,点击Help—>EclipseMarketplace......
  • 运行 python 3 代码时出现 python 2 语法错误
    我有一个如下所示的类classExperimentResult(BaseDataObject):def__init__(self,result_type:str,data:dict,references:list):super().__init__()self.type=result_typeself.references=referencesself.data=data......
  • 如何让 python 类型检查器知道它应该返回其类的新实例?
    我想使用classmethod返回当前类的新实例,并且我尝试了如下代码,但它引发了NameError('name'T'isnotDefined')PutthecodeT=TypeVar('T',bound=A)on|||以上也不起作用。classA有什么好主意来处理它吗?Isthereanygoodideatohandleit?......
  • 由于循环依赖而导致的Python注释错误
    我有两个相互依赖的类,并且无需注释即可正常工作。不幸的是,当我尝试注释返回值时,它会导致预期循环依赖错误。Network.pydefprocessors(self)->List[Processor]:#implementationProcessor.pydefnetwork(self)->Network:......