В настоящее время я пишу код графического интерфейса для небольшого проекта, над которым я работаю, и дошел до того момента, когда мне нужно реализовать полосы прокрутки и связанные с ними контейнеры. Для простоты выполнения я хотел бы иметь возможность рисовать все элементы в «поле прокрутки» (окно, на которое будет влиять полоса прокрутки) на отдельную поверхность от моей основной поверхности отображения. Затем отдельная поверхность будет обрезана по мере необходимости, а затем нарисована на поверхности отображения в цикле рендеринга. Однако у меня проблемы с тем, чтобы это работало.
В методе 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))
Как и все рисованные элементы графического интерфейса в моем коде, draw()
вызывается при каждом проходе через основной цикл рендеринга. Приведенный выше код дает мне заполненный по умолчанию черный прямоугольник, а self.image
не отображается ни в каком качестве. Я попытался заменить первую строку на
pygame.draw.rect(self.subSurface, color, rect)
но это дало те же результаты. Из того, что я читал о других библиотеках GUI Pygame, кажется, что то, что я хочу сделать, возможно, но я не думаю, что выполняю это должным образом. Как мне прикрепить другие источники / поверхности к subSurface
, а затем subSurface
нарисовать (с прикрепленными источниками) с помощью displaySurface
?
Любая помощь приветствуется. Спасибо.
blit()
конечные координаты относительно верхнего левого угла целевой поверхности. Что произойдет, если вы измените первый блит на цель(0, 0)
? - person atomicinf   schedule 03.01.2013