【发布时间】:2020-04-30 06:37:51
【问题描述】:
我正在 pygame 中制作一个简单的游戏,但在尝试减少代码时遇到了错误。
bulletDirectionBoolean = [bulletRight, bulletLeft, bulletDown, bulletUp]
firstTime = [firstTime1, firstTime2, firstTime3, firstTime4]
bulletDirectionX = [bulletRightX, bulletLeftX, bulletDownX, bulletUpX]
bulletDirectionY = [bulletRightY, bulletLeftY, bulletDownY, bulletUpY]
bulletDirectionMoving = [bulletRightX, bulletLeftX, bulletDownY, bulletUpY]
directionList = [1,-1,1,-1]
limits = [screenX, -20, screenY, -20]
for i in range(4):
if bulletDirectionBoolean[i] or powerupAbility[3]:
if firstTime[i]:
firstTime[i] = False
bulletDirectionX[i] = player_posX
bulletDirectionY[i] = player_posY
screen.blit(bullet_img, (bulletDirectionX[i], bulletDirectionY[i]))
bulletDirectionMoving[i] += bulletSpeed*directionList[i]
if directionList[i] == 1:
if bulletDirectionMoving[i] > limits[i]:
bulletDirectionBoolean = False
firstTime[i] = True
if directionList[i] == -1:
if bulletDirectionMoving[i] < limits[i]:
bulletDirectionBoolean = False
firstTime[i] = True
这是失败的代码块。 for 循环之后的第一行是它中断的地方。 powerupAbility 是另一个没有在代码中显示的具有布尔值的列表。列表 bulletDirectionBoolean 也是如此。列表中的所有值都是由用户控制的布尔值。我正在尝试同时访问每个列表中四个不同项目符号的每个值。
为什么会出现此错误,我该如何解决?
【问题讨论】:
-
你确定它在 range() 循环后的第一行中断了吗?不在bullectdirectionmoving[i] += .... ?
-
The first line after the for loop is where it breaks—您是指 inside for 循环的第一行,还是指 在 您实际发布的所有代码之后的一行? -
快速提示:使用并行列表通常不是很好,因为它们很容易失去同步。考虑使用属性
direction_boolean、first_time、direction_x、direction_y、direction_moving创建一个Bullet类。这样一来,您就可以只拥有一个包含项目符号对象的列表,而不是 5 个列表。
标签: python python-3.x pygame boolean typeerror