1

我正在创建一个简单的 mp3 播放器,我的第一个任务是创建一个用户可以按下的简单按钮。我创建了一个名为 Button 的类,它处理此行为并检测用户是否单击它然后更改颜色。我现在正在尝试使用按钮显示的默认文本和另一个字符串(pres_string),如果按下按钮,将显示该字符串。

唯一的问题是我的背景表面似乎在错误的位置,并且正在绘制我所做的任何更改。

这是我的代码:

http://pastebin.com/Nh3yy01X

如您所见,我已经注释掉了我描述的行,并在主函数中使用基本变量进行了尝试,只是为了测试出了什么问题。

谢谢你的帮助。

(随意更改问题的标题,我不确定最准确地描述了我的问题)

4

2 回答 2

1

每次循环清除表面

def draw(self):
    # clear screen."
    self.screen.fill( self.color_bg )

    # first draw background
    # Then buttons
    # then any extra top level text

    # update
    pygame.display.flip()

提示:对于颜色,您可以调用 pygame.Color() 与人类名称类似red(gray20并且gray80有一个很好的对比,用于背景和文本。)

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

你的按钮,伪代码。修复:将颜色作为实例成员移动。

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使用http://www.pygame.org/docs/ref/rect.html#Rect.collidepoint _Rect.collidepoint

于 2011-08-06T18:11:42.223 回答
0

基于 2D 位图的计算机图形就像绘图或绘画 - 您将新墨水放在已经存在的任何内容之上。所以你的背景必须是你每次画的第一件事。

于 2011-07-24T19:20:13.370 回答