Pygame分段错误,导入取决于代码中的位置



我知道这些分段错误问题很常见,但我找不到答案,我很紧张,因为代码的某些部分工作正常,但其他部分没有问题,或者在某些情况下,它第一次工作,第二天就掉了。

基本上,我正在为一个简单的pygame游戏导入精灵表。在帮助下,我编写了一个小类,它允许导入spritesheets,并通过一些方法使用json文件将它们转换为列表。该程序如下:

import pygame
import json

pygame.init()
class Spritesheet:
def __init__(self, filename):
self.filename = filename
self.sprite_sheet = pygame.image.load(filename).convert()
self.data_addr = self.filename.replace('png', 'json')

with open(self.data_addr, encoding = 'utf8') as f:
self.data = json.load(f)
f.close()


def check_file(self):

print(self.data)

def get_sprite(self, x, y, w, h):
sprite = pygame.Surface((w, h))
sprite.set_colorkey((0,0,0))
sprite.blit(self.sprite_sheet,(0, 0),(x, y, w, h))
return sprite
def parse(self, index):
sprite = self.data['frames'][index]['frame']
x, y, w, h = sprite["x"], sprite["y"], sprite["w"], sprite["h"]
image = self.get_sprite(x, y, w, h)
return image

def dict_len(self):
length = len(self.data['frames'])
return length

这在主代码中运行良好。我有一个玩家类,一个敌人类等,在草签后,这个类被调用来为图形创建一个png列表(我可以逐步完成(。玩家类的相关片段如下:

class Player(pygame.sprite.Sprite):
def __init__(self, player_posx, health):
super().__init__()

#right facing sprites
self.spritesr = Spritesheet('../graphics/player/players.png')
self.player_spritesr = []
for value in range(self.spritesr.dict_len()):
self.player_spritesr.append(self.spritesr.parse(value))

# left facing sprites
self.spritesl = Spritesheet('../graphics/player/playersl.png')
self.player_spritesl = []
for value in range(self.spritesl.dict_len()):
self.player_spritesl.append(self.spritesl.parse(value))

#static sprites
self.sprites_static = Spritesheet('../graphics/player/player_static.png')
self.player_static = []
for value in range(self.sprites_static.dict_len()):
self.player_static.append(self.sprites_static.parse(value))

self.image_index = 0
self.image = self.player_spritesr[self.image_index]
self.rect = self.image.get_rect()

在这个类中,它可以很好地与Spritesheets类配合使用。然而,当我决定创建一个新文件来将所有图形导入到一个单独的文件中时,我得到了分段错误。代码很简单:

from spritesheets import Spritesheet
test = Spritesheet('../graphics/player/playersl.png')

用相同的参数调用完全相同的类,但我得到一个错误:Python致命错误:(pygame降落伞(分段错误Python运行时状态:已初始化

我真的一点也不明白,尤其是为什么它在一个文件中运行良好,但在其他任何地方都会失败。

可能的问题是在调用pygame.init()之前进行导入,因此pygame尚未初始化。

考虑在你的第二个文件中这样做:

from spritesheets import Spritesheet
def get_sprites():
return [
Spritesheet('../graphics/player/players.png'),
Spritesheet('../graphics/player/playersl.png'),
Spritesheet('../graphics/player/players_static.png')
]

现在你可以把你的import放在最上面,然后打电话给

sprites = xxx.get_sprites()

初始化pygame之后。

相关内容

  • 没有找到相关文章

最新更新