Ошибка Python: объект None Type не поддерживает назначение элемента - PullRequest
1 голос
/ 12 июля 2019

В настоящее время я делаю игру с использованием pygame, в которой на данный момент я пытаюсь отображать рыбу на экране, чтобы она появлялась случайным образом вокруг экрана.Позже, эти рыбы будут добавлять очки для оценки.Тем не менее, я получаю сообщение об ошибке, когда пытаюсь загрузить рыбу в игру.Как я могу это исправить?

Прямо сейчас я следую значительному большинству кода, похожего на игру «Squirrel eat Squirrel», которую, я считаю, можно играть на Raspberry Pi, и также следую некоторымвидео sentdex на YouTube.Я отлаживал его любыми средствами, которые решали проблему, но я не понимаю, что означает эта ошибка или как ее исправить.

Сейчас я запускаю следующий код:

global screen, grasspic, bearImg, fishpic, screen_width, screen_height
import random
import pygame
import sys
import math
pygame.init()

camerax = 0
cameray = 0
screen_width = 640
screen_height = 480

fishpic = []
for i in range(1, 3):
    fishpic.append(pygame.image.load('fish%s.png' % i))

for i in range(3):
            allfish.append(makeNewFish(camerax, cameray))
            allfish[i]['x'] = random.randint(0, screen_width)
            allfish[i]['y'] = random.randint(0, screen_height)

def getRandomOffCameraPos(camerax, cameray, objWidth, objHeight):
    cameraRect = pygame.Rect(camerax, cameray, screen_width, screen_height)
    while True:
        x = random.randint(camerax - screen_width, camerax + (2*screen_width))
        y = random.randint(cameray - screen_height, cameray + (2*screen_height))
        objRect = pygame.Rect(x, y, objWidth, objHeight)
        if not objRect.colliderect(cameraRect):
            return x, y

def makeNewFish(camerax, cameray):
    fi = {}
    fi['fishPicture'] = random.randint(0, len(fishpic) - 1)
    fi['width'] = 150
    fi['height'] = 150
    fi['x'], fi['y'] = getRandomOffCameraPos(camerax, cameray, fi['width'], fi['height'])
    fi['rect'] = pygame.Rect((fi['x'], fi['y'], fi['width'], fi['height']))

Я надеялся, что результат будет иметь случайное появление рыбы, как если бы мир был «бесконечным», но вместо этого я получаю ошибку, которая гласит: allfish[i]['x'] = random.randint(0, screen_width)

TypeError: объект None Type не поддерживает элементзадание "

Есть ли простой способ исправить это?

Извините, если я не объяснил это хорошо. Если это необходимо, я могу предоставить большекод и попробуйте ответить на что-либо я не объяснил.

1 Ответ

0 голосов
/ 12 июля 2019

Вы пропустили оператор возврата в функции makeNewFish:

def makeNewFish(camerax, cameray):
    fi = {}
    fi['fishPicture'] = random.randint(0, len(fishpic) - 1)
    fi['width'] = 150
    fi['height'] = 150
    fi['x'], fi['y'] = getRandomOffCameraPos(camerax, cameray, fi['width'], fi['height'])
    fi['rect'] = pygame.Rect((fi['x'], fi['y'], fi['width'], fi['height']))

    return fi # <-----

Без оператора return возвращаемое значение функции равно None, а None добавляется к allfish, когда вы делаете:

allfish.append(makeNewFish(camerax, cameray))
...