Pygame表面力学

时间:2013-01-02 22:35:35

标签: python pygame geometry-surface

我正在为我正在开发的一个小项目编写一些GUI代码,我已经到了需要实现滚动条及其相关容器的地步。为了便于执行,我希望能够将“滚动框”(滚动条将影响的窗口)中的所有元素绘制到与主显示表面不同的表面。然后根据需要裁剪单独的表面,然后在渲染循环中将其绘制到显示表面。然而,我无法让它工作。

draw()课程的ScrollBox方法中,我有以下代码。

def draw(self):
    self.subSurface.blit(self.image, (x, y)) 
    #subSurface is, naturally, a Surface, and image is a pygame.Image; x and y are whatever
    self.displaySurface.blit(self.subSurface, (x,y))

与我代码中的所有可绘制GUI元素一样,每次遍历主渲染循环时都会调用draw()。上面的代码给出的是默认的填充黑色Rect,self.image不以任何容量显示。我尝试用

替换第一行
pygame.draw.rect(self.subSurface, color, rect)

但它产生了相同的结果。从我对其他Pygame GUI库的阅读来看,似乎我想做的事情是可能的,但我不认为我正在执行它。如何将其他来源/曲面附加到subSurface,然后subSurface绘制displaySurface(附带来源)?

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:2)

对于将来访问此问题的人:

请记住,dest的{​​{1}}参数相对于目标曲面的左上角。因此,如果您要在地下组装图像,请记住使用相对于您正在组装的对象左上角的坐标,而不是绝对显示坐标。

所以要组装一个滚动条并将其绘制到某个地方:

Surface.blit()

调整所有数字和变量名称,但你明白了。请注意,所有滚动条元素都位于“滚动条局部”坐标中,只有显示表面的最后一个blit位于屏幕/应用程序坐标中。