gpt4 book ai didi

python - Pygame 表面力学

转载 作者:行者123 更新时间:2023-11-28 17:48:39 25 4
gpt4 key购买 nike

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

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

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,然后让 displaySurface 绘制(附加源)subSurface

任何帮助将不胜感激。谢谢。

最佳答案

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

请记住,Surface.blit()dest 参数是相对于目标表面的左上角的。因此,如果您在地下组装图像,请记住使用相对于您正在组装的对象左上角的坐标,而不是绝对显示坐标。

所以要组装一个滚动条并将其绘制在某处:

class ScrollBar:
# ... code ...
def render(self, display, x, y):
self.subSurface.blit(self.handle_image, (0, self.handle_pos))
self.subSurface.blit(self.upbtn_image, (0, 0))
self.subSurface.blit(self.dnbtn_image, (0, self.height - self.btn_height))
# ... other rendering operations
display.blit(self.subSurface, (x, y))

根据口味调整所有数字和变量名称,但您明白了。请注意,所有滚动条元素都定位在“滚动条局部”坐标中,只有显示表面的最终 blit 定位在屏幕/应用程序坐标中。

关于python - Pygame 表面力学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14130345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com