首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pygame表面力学

Pygame表面力学
EN

Stack Overflow用户
提问于 2013-01-03 06:35:35
回答 1查看 915关注 0票数 3

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

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

代码语言:javascript
复制
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))

与我的代码中所有可绘制的图形用户界面元素一样,每次通过主呈现循环都会调用draw()。上面的代码给我的是默认填充的黑色矩形,self.image在任何容量下都不显示。我尝试将第一行替换为

代码语言:javascript
复制
pygame.draw.rect(self.subSurface, color, rect)

但它产生了相同的结果。从我对其他Pygame GUI库的阅读来看,我想要做的似乎是可能的,但我认为我没有正确地执行它。如何将其他源/表面附加到subSurface,然后让displaySurface绘制(附加了源) subSurface

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-03 06:50:28

对于将来访问这个问题的人:

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

因此,要组装滚动条并将其绘制到某个位置:

代码语言:javascript
复制
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))

根据需要调整所有的数字和变量名,但您会明白其中的意思。请注意,所有的scrollbar元素都位于"scrollbar-local“坐标中,只有显示表面的最后一个blit位于屏幕/应用程序坐标中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14130345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档