我没有弄到什么问题。我将发布相关代码的一部分。
错误:
Traceback (most recent call last):
File "C:\Python\pygame\hygy.py", line 104, in <module>
check_action()
File "C:\Python\pygame\hygy.py", line 71, in check_action
check_portal()
File "C:\Python\pygame\hygy.py", line 75, in check_portal
if [actor.x - 16, actor.y - 16] > portal[i][0] and [actor.x + 16, actor.y + 16] < portal[i][0]:
TypeError: tuple indices must be integers
功能:
def check_portal():
for i in portal:
if [actor.x - 16, actor.y - 16] > portal[i][0] and [actor.x + 16, actor.y + 16] < portal[i][0]:
if in_portal == False:
actor.x,actor.y=portal[i][1]
in_portal = True
elif [actor.x - 16, actor.y - 16] > portal[i][1] and [actor.x + 16, actor.y + 16] < portal[i][1]:
if in_portal == False:
actor.x,actor.y=portal[i][1]
in_portal = True
else:
in_portal = False
初始化演员:
class xy:
def __init__(self):
self.x = 0
self.y = 0
actor = xy()
初始化门户网站:
portal = [[100,100],[200,200]],[[300,300],[200,100]]
答案 0 :(得分:1)
鉴于portal
的初始化,循环
for i in portal:
...
只会进行两次迭代。在第一次迭代中,i
将为[[100,100],[200,200]]
。尝试portal[i]
等同于portal[[[100,100],[200,200]]]
,这没有意义。您可能只想使用i
而不是portal[i]
。 (您可能希望将其重命名为比i
更有意义的内容。)
答案 1 :(得分:1)
当你说for i in portal
时,在每次迭代中,portal
实际上是i
的元素,而不是你可能想到的portal
中的索引。因此它不是整数,并导致portal[i][0]
中的错误。
因此,快速解决方案只是将for i in xrange(len(portal))
替换为i
,而{{1}}就是索引。
答案 2 :(得分:0)
在for循环中,i = ([100, 100], [200, 200])
,它不是列表的有效索引。
鉴于if语句中的比较,看起来你的意图更像是:
for coords in portal:
if [actor.x - 16, actor.y - 16] > coords[0] and [actor.x + 16, actor.y + 16] < coords[0]:
在循环的第一次迭代中coords[0] == [100, 100]
。