首页 > 解决方案 > 'int' 对象不可下标。元组错误

问题描述

如何解决我的代码中生成的问题TypeError

class Player(object):
    def __init__(self, board):
        self.board = board
        self.x = 607
        self.y = 420
        self.pos = [(self.x, self.y)]

    def movement(self, x, y):
        self.x += x
        self.y += y
        self.pos = [self.x, self.y]

    def draw(self):
        for tup in self.pos:
            if (tup[0] == self.x) and (tup[1] == self.y):
                pygame.draw.circle(self.board.window, (255, 255, 0), (self.x, self.y), 8)

    def update(self):
        pygame.display.update()
Traceback (most recent call last):
   File "C:/Users/fotio_000/PycharmProjects/Pacman/main.py", line 4, in <module>
   board = Board()
   File "C:\Users\fotio_000\PycharmProjects\Pacman\Game.py", line 32, in __init__
   self.all_events()
   File "C:\Users\fotio_000\PycharmProjects\Pacman\Game.py", line 38, in all_events
   self.draw()
   File "C:\Users\fotio_000\PycharmProjects\Pacman\Game.py", line 65, in draw
   self.player.draw()
   File "C:\Users\fotio_000\PycharmProjects\Pacman\Player.py", line 18, in draw
   if (tup[0] == self.x) and (tup[1] == self.y):
TypeError: 'int' object is not subscriptable

标签: pythonlistpygametuples

解决方案


为什么对象播放器需要多个位置?

int constrictorself.pos是一个元组列表:

self.pos = [(self.x, self.y)]

但是当你改变它时,movement它是一个单一的位置,2个坐标存储在一个列表中:

self.pos = [self.x, self.y]

这就是导致错误的原因。将后者更改为self.pos = [(self.x, self.y)]可以解决问题,但是...

由于您想在 ( , ) 位置画一个圆圈,因此无需将列表中的位置与 ( , self.x)进行比较。请注意, ( , ) 始终存储在列表中,那么您为什么要尝试验证呢?只需在 ( , ) 处绘制圆圈。例如:self.yself.xself.yself.xself.y
self.xself.y

class Player(object):

    # [...]

    def draw(self):
        pygame.draw.circle(self.board.window, (255, 255, 0), (self.x, self.y), 8)

推荐阅读