【发布时间】:2018-11-26 20:26:27
【问题描述】:
我正在尝试遍历类对象/模块对象列表以检查冲突并引发此错误:
File "C:/Users/travi/PycharmProjects/game/main.py", line 81, in <module>
if collision.collision1.is_collision(player.player1.vel, player.player1.x1, player.player1.x2, player.player1.y1, player.player1.y2, environmentVector[i].x1, environmentVector[i].x2, environmentVector[i].y1, environmentVector[i].y2):
TypeError: list indices must be integers or slices, not environment
这是代码(来自 main.py)
for i in environmentVector:
if collision.collision1.is_collision(player.player1.vel, player.player1.x1, player.player1.x2, player.player1.y1, player.player1.y2, environmentVector[i].x1, environmentVector[i].x2, environmentVector[i].y1, environmentVector[i].y2):
print("collision")
环境.py:
import pygame
class environment():
def __init__(self, x, y, width, height):
self.x = x
self.y = y
self.x1 = x - 16
self.x2 = x + 16
self.y1 = y - 16
self.y2 = y + 16
collision.py:
import pygame
import player
import enemy
import environment
class collision():
def __init__(self):
self.collision = False
def is_collision(self, moveSpeed, x1, x2, y1, y2, X1, X2, Y1, Y2):
if (((x2 + moveSpeed >= X1) and (x2 <= X2)) and (((y2 >= Y1) and (y2 <= Y2)) or ((y1 <= Y2) and (y1 >= Y1)))) or (((x1 - moveSpeed <= X2) and (x1 >= X1)) and (((y2 >= Y1) and (y2 <= Y2)) or ((y1 <= Y2) and (y1 >= Y1)))):
return True
else:
return False
【问题讨论】:
-
environmentVector[i].x1 -> i.x1
-
Python 循环是 for-each 循环。在每次迭代中,
i是环境对象本身,而不是计数器。 -
那是很多多余的
(...)