Мой код выдает ошибку о NoneType, но он должен быть определен - PullRequest
1 голос
/ 19 февраля 2020

Я пытался переопределить местоположение, но оно не остановит выдачу ошибки NoneType.

Я также пытался определить направление в классе, но безрезультатно. Я также попытался удалить объявление без указания местоположения в функции Head init , без изменений.

Traceback (most recent call last):
  File "main.py", line 55, in <module>
    head.draw()
  File "main.py", line 39, in draw
    start_point = (self.location[0] + paddingSize, self.location[0] + paddingSize)
TypeError: 'NoneType' object is not subscriptable
import pygame

size = 24
paddingSize = 1
displaySize = 960

def add(a, b):
    a = list(a)
    for xi in range(len(a)):
        a[xi] += b[xi]


class SnakePart:
    location = (0, 0)  # x, y
    direction = (0, 0)

    def __init__(self, next_part, direction):
        self.direction = direction
        self.location = next_part.location
        if direction[0]:  # up
            self.location[0] += 1
        elif not direction[0]:  # down
            self.location[0] -= 1
        elif direction[1]:  # right
            self.location[0] += 1
        elif not direction[1]:  # left
            self.location[0] -= 1


class Head(SnakePart):
    def __init__(self, start_pos, direction):
        self.location = start_pos
        self.direction = direction

    def move(self, direction):
        self.direction = direction

    def draw(self):
        start_point = (self.location[0] + paddingSize, self.location[0] + paddingSize)
        end_point = (start_point[0] + paddingSize + sizeOfSquare, start_point[1] + paddingSize + sizeOfSquare)
        self.location = add(self.location, self.direction)
        pygame.draw.rect(surface, (52, 60, 107), pygame.Rect(start_point, end_point))


pygame.display.init()
display = pygame.display.set_mode(size=(displaySize, displaySize))
surface = pygame.display.get_surface()
sizeOfSquare = (displaySize/size)-paddingSize*2
clock = pygame.time.Clock()
pygame.key.set_repeat(100)
head = Head((0, 0), (-1, 0))
while True:
    clock.tick(60)
    display.fill((0, 0, 0))
    head.draw()

1 Ответ

2 голосов
/ 19 февраля 2020

add () не возвращает значение, поэтому location становится None, что приводит к вашему исключению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...