使用 Pygame 和以下代码在 if type == 'terrain': area 上获取 NoneType 错误
import pygame
from support import import_csv_layout, import_cut_graphics
from settings import tile_size
from tiles import Tile, StaticTile
class Level:
def __init__(self, level_data, surface):
#general setup
self.display_surface = surface
self.world_shift = 0
#terrain setup
terrain_layout = import_csv_layout(level_data['terrain'])
self.terrain_sprites = self.create_tile_group(terrain_layout, 'terrain')
def create_tile_group(self, layout, type):
sprite_group = pygame.sprite.Group()
for row_index, row in enumerate(layout):
for col_index, val in enumerate(row):
if val != '-1':
x = col_index * tile_size
y = row_index * tile_size
**if type == 'terrain':
terrain_tile_list = import_cut_graphics('Assets/terrain.png')
tile_surface = terrain_tile_list[int(val)]
sprite = StaticTile(tile_size, x, y, tile_surface)
sprite_group.add(sprite)**
return sprite_group
def run(self):
self.terrain_sprites.draw(self.display_surface)
self.terrain_sprites.update(self.world_shift)
支持文件
def import_csv_layout(path):
terrain_map = []
with open(path) as tilemap:
level = reader(tilemap, delimiter=',')
for row in level:
terrain_map.append(list(row))
return terrain_map
def import_cut_graphics(path):
surface = pygame.image.load(path).convert_alpha()
tile_num_x = int(surface.get_size()[0] / tile_size)
tile_num_y = int(surface.get_size()[1] / tile_size)
cut_tiles = []
for row in range(tile_num_y):
for col in range(tile_num_x):
x = col * tile_size
y = row * tile_size
new_surface = pygame.Surface((tile_size, tile_size))
new_surface.blit(surface, (0, 0), pygame.Rect(x, y, tile_size, tile_size))
cut_tiles.append(new_surface)
CSV 拉出 -1、0 或 1,PNG 位于正确的文件夹中。删除 (int[val]) 给我一个全新的错误 sprite = StaticTile(tile_size, x, y, tile_surface) TypeError: Tile.init() takes 4 positional arguments but 5 were given
我还是不明白。
看起来
terrain_tile_list
是None
,因为import_cut_graphics
什么都不返回。也许路径参数是错误的?
确保
import_cut_graphics
返回预期的列表,或者在访问之前检查terrain_tile_list
中的内容。
确保
import_csv_layout
导入正确的数据,错误表明您将 None 值传递给 int[val]
演员。