python - '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
解决方案
为什么对象播放器需要多个位置?
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.y
self.x
self.y
self.x
self.y
self.x
self.y
class Player(object):
# [...]
def draw(self):
pygame.draw.circle(self.board.window, (255, 255, 0), (self.x, self.y), 8)
推荐阅读
- javascript - 从 Nodejs 到 React Native 中的前端的音频流、blob 文件和播放,
- webpack - 如何在 style.scss 中使用 @import 配置 Webpack?
- riot-games-api - 在 Riot API 上检索 LIfetime 匹配计数
- python - 在 C++ 中输入 -> Python 平台
- maude-system - 学习 Maude 重写逻辑的说明
- python - 类型错误'str'对象在python中不可调用
- openxml - 每个包含日期值的列的word文档中的openxml排序表
- firebase - Flutter 从 Firestore 中删除文档及其子集合(请不要关闭)
- reactjs - React Hooks:方法没有正确记录正确的状态
- flutter - Flutter Tesseract Ocr Aar 文件