如何在pygame中移动一类对象?

0 投票
1 回答
892 浏览
提问于 2025-04-18 05:17

我有一组用 pygame.draw.rect 画出来的矩形,像下面这样:

pygame.draw.rect(windowSurface, BROWN, (x+25,  y+35,   5,   5))

这些矩形都是在 Archer() 这个类里,放在一个叫 draw(x, y) 的函数里面。不过,我想把这些矩形一起移动,而不是一个一个地移动。请问我该怎么做才能在这个类里一次性移动所有的对象呢?我的代码在这里: http://pastebin.com/APkgTnTk

1 个回答

0

把这些对象放进一个叫做 RenderUpdates 的组里。这样你就可以把这些东西当作一个整体在屏幕上绘制,也可以把函数一起调用。例如,你可以这样做:

window_surfaces = pygame.sprite.RenderUpdates()

然后在你想要调用的类的 init 函数里包含这些内容:

window_surfaces.add(self)

接着,当你想对它们全部调用一个函数时,你可以这样调用:

window_surfaces.draw()

你可能会考虑把每个类的单独参数放在 "self" 里面,这样会更方便。

另外,如果你只是想在它们当前的位置绘制一组精灵,你可以直接调用:

pygame.display.update(window_surfaces.draw(screen))

不过要注意,这个绘制函数不是你自己定义的,而是 RenderUpdates 这个对象自带的。如果你使用了 RenderUpdates,可能不想覆盖这个函数。

还有,看起来你可能并没有在使用精灵。如果是这样的话(而且你可能真的要考虑使用精灵,因为它们有很多有用的功能,而这些功能你得自己从头开始做),那么你需要在 init 函数里让这些类把自己添加到一个列表中,然后用一个循环来调用函数,像这样:

for itemtodraw in mygroup:
    itemtodraw.draw()

撰写回答