Какова правильная последовательность бликования поверхностей на экране в Pygame? - PullRequest
1 голос
/ 23 июля 2011

Я создаю простой mp3-плеер, и моей первой задачей было создать простую кнопку, которую пользователь мог нажать.Я создал класс с именем Button, который обрабатывает это поведение и определяет, нажал ли пользователь на него, а затем меняет цвет.Сейчас я пытаюсь получить текст по умолчанию, который отображает кнопка, и другую строку (pres_string), которая будет отображаться при нажатии кнопки.

Единственная проблема в том, что моя фоновая поверхность, кажется, не в том месте и рисует все сделанные мной изменения.

Вот мой код:

http://pastebin.com/Nh3yy01X

Как вы можете видеть, я закомментировал строки, которые я описал, и попробовал его с помощью основных переменных в основной функции просточтобы проверить, что идет не так.

Спасибо за любую помощь.

(не стесняйтесь менять название вопроса, я не был уверен, что наиболее точно описало мою проблему)

Ответы [ 2 ]

1 голос
/ 06 августа 2011

Очистить поверхность каждый цикл, использовать для bg и текста.)

    from pygame import Color
    text = Color('gray20')

Ваша кнопка, psuedocode.Исправлено: перемещенный цвет в качестве члена экземпляра.

class Button(object):
    def __init__(self, text, rect=None):
        self.color_bg = Color("gray20")
        self.color_text = color("gray80")

        if rect is None: rect = Rect(0,0,1,1)
        self.rect = rect
        self._render()   
    def _render(self):
        # draw button and .render() font, cache to surface for later.    
        self.surface_cached = self.surface.copy()
        # render text

        #if size changes, save rect.size of cached surface , mantaining location
        self.rect.size = cache.get_rect.size
    def draw(self):
        # draw cached surface
        screen.blit( self.surface_cached, self.rect)

Для testClick используйте Rect.collidepoint http://www.pygame.org/docs/ref/rect.html#Rect.collidepoint

0 голосов
/ 24 июля 2011

Двухмерная компьютерная графика, основанная на растровых изображениях, похожа на рисование или рисование - вы наносите новые чернила поверх того, что там уже было. Так что ваш фон должен быть первым, что вы рисуете каждый раз.

...