我正在用pygame制作一个游戏,我希望当鼠标悬停在我的文本上时,框会变暗。你知道吗
到目前为止,我掌握的情况如下:
在事件处理循环中:
(CheckToUnshadeBoxes
中的元组是一对文本表面及其框(来自get_rect
方法))
elif event.type == MOUSEMOTION:
CheckToShadeBoxes(event, LERect, LoadRect, PlayRect)
CheckToUnshadeBoxes(event, (LERect, LESurf),
(LoadRect, LoadSurf), (PlayRect, PlaySurf))
这里是CheckToShadeBoxes
:
def CheckToShadeBoxes(event, *args):
'''
shade the box the mouse is over
'''
for rect in args:
s = pg.Surface((rect.width, rect.height))
s.set_alpha(50)
print(rect.x, rect.y)
s.fill(COLOURS['gray'])
x, y = event.pos
if rect.collidepoint(x, y):
SURFACE.blit(s, (rect.x, rect.y))
和CheckToUnshadeBoxes
:
def CheckToUnshadeBoxes(event, *args):
''' if the mouse moves out of the box, the box will become unshaded.'''
for (rect, TextSurf) in args:
x, y = event.pos
if not rect.collidepoint(x, y):
SURFACE.blit(TextSurf, (rect.x, rect.y))
这个很好用!只是当我把鼠标移到盒子里面的时候,盒子会越来越暗,直到你看不到文本为止!我知道这是一个小细节,但它已经困扰了我很长时间,我不知道如何修复它。你知道吗
顺便说一下,如果不够明显的话,COLOURS
是一个带有字符串键和RGB元组值的字典,SURFACE
是我的主绘图面。你知道吗
如果你对我的代码有任何疑问,或者我做过的任何事情,请发表评论!你知道吗
代码的问题是,当鼠标悬停在上面时,您一直在添加黑色矩形。难怪天越来越黑了。你知道吗
所需要做的就是让你的代码稍微乱一点。你知道吗
在事件处理内部,您应该调用一个函数来检查它是否应该对文本进行着色处理。这应该返回一个布尔值。将其存储在变量中。来自
CheckToShadeBoxes
函数的大部分代码都可以实现这一点。你知道吗在“渲染”(render)区域中,应根据布尔值是否为true,仅渲染文本顶部的一个曲面。在
CheckToShadeBoxes
函数中创建灰色曲面的代码可以工作,但请确保它只是一个曲面。不要在每次迭代中都创建新曲面。在外定义一次,然后将其放到循环内的屏幕上。你知道吗这应该能解决你的问题!你知道吗
我希望这个答案对你有帮助!如果您有任何进一步的问题,请随时发表评论下面!你知道吗
如果要传递的rect是您自己的派生类,那么我建议创建一个.is\u shaded类变量,并在对其着色之前检查该变量是否为false。你知道吗
如果这些rect不是您自己的类扩展的另一个类,那么我建议您创建一个rect,因为这样会使它更简单
相关问题 更多 >
编程相关推荐