【问题标题】:pygame Rect group isn't movingpygame Rect 组没有移动
【发布时间】:2018-01-19 20:49:27
【问题描述】:

我有问题。在我的 pygame 代码中,有一群恶棍,他们总是朝着英雄前进。在这个函数中,我尝试用一​​定的步数 (-5) 更新一个 villian 的每个矩形的 x 和 y 值,但是这些矩形不会从它们在屏幕上的初始阶段改变。功能有什么问题?谢谢。

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)

【问题讨论】:

  • 请附上您的程序的a Minimal, Complete, and Verifiable example
  • 你记得重绘它们吗?每次移动它们时都必须绘制它们
  • 尼克它们是图像,带有 get_rect() 属性和它们的矩形列表
  • @YairHaber 他们还需要重绘,pygame不会自动更新它的屏幕,给我们看更多代码,还有,villian是什么? villian.move 确实返回 villian 还是返回 None
  • villian 是其中一个villian 的矩形,我遍历列表

标签: python python-2.7 pygame


【解决方案1】:

updateXY_villians 中,您不会更新列表中的villian(矩形),而是创建一个新矩形并将其分配给名称villianvillian 变量在下一次迭代中被覆盖,最后一个 villian rect 丢失。

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

要更新列表中的矩形,您需要调用move_ip 方法,该方法将矩形移动到位,而不创建新的矩形。

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

【讨论】:

  • 顺便说一句,不要使用全局变量,因为它们会使代码更难理解和维护,而是将列表传递给函数并返回更新后的列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多