我有问题。在我的pygame代码中,有一组villians,它们总是朝向英雄。在这个函数中,我尝试用一定量的步骤(-5)更新villian的每个rect的x和y值,但是rects不会从屏幕上的初始阶段改变。这个功能有什么问题?谢谢。
def updateXY_villians():####################### not updating ################
global lstVillainRect
for villian in lstVillainRect:
villian = villian.move(-5, 0)
def CreateVillainsRect(lstVillainXY_type):
lstVillainRect = []
for x, y, tiles in lstVillainXY_type:
lstVillainRect.append(pygame.Rect(x, y, CUBE_WIDTH, CUBE_HEIGHT))
return lstVillainRect
def makeListOfVillainXY_type():
global lstVillainXY_type
lstVillainXY_type = []
lastI = 0
for i in range(CHARACTER_START_PLACE_X + 100, SCREEN_WIDTH - 20, 200):
type = random.randrange(0, 5)
x = random.randrange(lastI, i)
y = lst_villain_y[type]
lstVillainXY_type.append((x, y, type))
lastI = i
for x, y, type in lstVillainXY_type:
for restX, restY, restType in lstVillainXY_type:
if abs(x - restX) < CUBE_WIDTH:
lstVillainXY_type.remove((restX, restY, restType))
return sorted(lstVillainXY_type)
答案 0 :(得分:0)
在updateXY_villians
中,您不更新列表中的villian
(rect),而是创建一个新的rect并将其指定给名称villian
。 villian
变量在下一次迭代中被覆盖,最后villian
矩形丢失。
for villian in lstVillainRect:
villian = villian.move(-5, 0)
要更新列表中的rects,您需要调用move_ip
方法,将rect 移动到位而不创建新的rect。
for villian in lstVillainRect:
villian.move_ip(-5, 0)