pygame Rect组不动了

2024-10-01 15:43:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个问题。在我的pygame代码中,有一群村民,他们总是朝着英雄前进。在这个函数中,我尝试用一定的步长(-5)来更新一个villian的每个rect的x和y值,但是rect不会从屏幕上的初始阶段改变。功能有什么问题?非常感谢。你知道吗

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)

Tags: inrectfordeftypewidthglobalpygame
1条回答
网友
1楼 · 发布于 2024-10-01 15:43:29

updateXY_villians中,不更新列表中的villian(rect),而是创建一个新rect并将其分配给名称villianvillian变量在下一次迭代中被重写,最后一个villianrect丢失。你知道吗

for villian in lstVillainRect:
    villian = villian.move(-5, 0)

要更新列表中的rect,需要调用move_ip方法,该方法在不创建新rect的情况下将rect移动到位。你知道吗

for villian in lstVillainRect:
    villian.move_ip(-5, 0)

相关问题 更多 >

    热门问题