在 [int(val)] 上出现“TypeError: 'NoneType' object is not subscriptable”

问题描述 投票:0回答:2

使用 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

我还是不明白。

python pygame nonetype
2个回答
0
投票

看起来

terrain_tile_list
None
,因为
import_cut_graphics
什么都不返回。也许路径参数是错误的?

确保

import_cut_graphics
返回预期的列表,或者在访问之前检查
terrain_tile_list
中的内容。


0
投票

确保

import_csv_layout
导入正确的数据,错误表明您将 None 值传递给
int[val]
演员。

© www.soinside.com 2019 - 2024. All rights reserved.