如何在pygame中移动一类对象?
我有一组用 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()