当鼠标在pygame中悬停时,如何对长方体进行着色?

2024-06-16 12:39:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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是我的主绘图面。你知道吗

如果你对我的代码有任何疑问,或者我做过的任何事情,请发表评论!你知道吗


Tags: therect文本boxeventifdefargs
2条回答

代码的问题是,当鼠标悬停在上面时,您一直在添加黑色矩形。难怪天越来越黑了。你知道吗

所需要做的就是让你的代码稍微乱一点。你知道吗

在事件处理内部,您应该调用一个函数来检查它是否应该对文本进行着色处理。这应该返回一个布尔值。将其存储在变量中。来自CheckToShadeBoxes函数的大部分代码都可以实现这一点。你知道吗

在“渲染”(render)区域中,应根据布尔值是否为true,仅渲染文本顶部的一个曲面。在CheckToShadeBoxes函数中创建灰色曲面的代码可以工作,但请确保它只是一个曲面。不要在每次迭代中都创建新曲面。在外定义一次,然后将其放到循环内的屏幕上。你知道吗

这应该能解决你的问题!你知道吗

我希望这个答案对你有帮助!如果您有任何进一步的问题,请随时发表评论下面!你知道吗

如果要传递的rect是您自己的派生类,那么我建议创建一个.is\u shaded类变量,并在对其着色之前检查该变量是否为false。你知道吗

如果这些rect不是您自己的类扩展的另一个类,那么我建议您创建一个rect,因为这样会使它更简单

相关问题 更多 >