3

何が悪いのかわかりません。関連するコードの部分を投稿します。

エラー:

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]]
4

3 に答える 3

1

の初期化を考えるとportal、ループ

for i in portal:
    ...

2回の反復のみを実行します。最初の反復では、iになります[[100,100],[200,200]]。やろうとすることportal[i]はと同等portal[[[100,100],[200,200]]]であり、これは意味がありません。iおそらく、の代わりに使用したいだけですportal[i]。(おそらく、それよりも意味のある名前に変更することiもできます。)

于 2012-03-05T17:02:55.013 に答える
1

あなたが言ったとき、各反復では、あなたが考えるかもしれないfor i in portalインデックスの代わりに、実際にはの要素です。したがって、整数ではなく、でエラーが発生します。portaliportalportal[i][0]

したがって、簡単な修正は、インデックスfor i in xrange(len(portal))である、に置き換えるだけです。i

于 2012-03-05T17:05:56.890 に答える
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]で、ループの最初の反復。

于 2012-03-05T17:08:02.410 に答える