我正在创建一个简单的MP3播放器,我的第一个任务是创建一个用户可以按下的简单按钮。我创建了一个名为Button的类来处理这种行为,并检测用户是否单击它然后更改颜色。我现在正在尝试使用按钮显示的默认文本和另一个字符串(pres_string),如果按下该按钮将显示该字符串。
唯一的问题是我的背景表面似乎在错误的地方,并且正在描绘我所做的任何改变。
这是我的代码:
正如您所看到的,我已经注释掉了我描述的行,并在主函数中使用基本变量进行了尝试,以测试出错的地方。
感谢您的帮助。
(随意更改问题的标题,我不确定最准确地描述我的问题)
答案 0 :(得分: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
这样的人物名称,具有良好的对比度,可用于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
答案 1 :(得分:0)
基于2D位图的计算机图形就像绘画或绘画 - 你把新墨水放在已经存在的东西之上。所以你的背景必须是你每次画的第一件事。