我正在创建一个简单的 mp3 播放器,我的第一个任务是创建一个用户可以按下的简单按钮。我创建了一个名为 Button 的类,它处理此行为并检测用户是否单击了它,然后更改颜色。我现在尝试设置按钮显示的默认文本和按下按钮时将显示的另一个字符串(pres_string)。
唯一的问题是我的背景表面似乎位于错误的位置,并且正在覆盖我所做的任何更改。
这是我的代码:
正如您所看到的,我已经注释掉了我所描述的行,并在主函数中使用基本变量进行了尝试,只是为了测试出了什么问题。
感谢您的帮助。
(请随意更改问题的标题,我不确定什么最准确地描述了我的问题)
最佳答案
每次循环清除表面
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()
提示:对于颜色,您可以使用诸如 red
之类的人类名称来调用 pygame.Color() (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
,使用Rect.collidepoint
http://www.pygame.org/docs/ref/rect.html#Rect.collidepoint
关于python - 在 pygame 中将表面传输到屏幕的正确顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6795644/