PyGame MOUSEBUTTONDOWN事件的菜单问题

时间:2011-04-21 07:34:01

标签: python pygame

是的,这个标题根本没有措辞。

好的,这就是我们所拥有的 - 使用pyGame库的Python程序,我们正在制作游戏。我们从菜单环境main.py开始。当用户单击其中一个菜单按钮时,将执行操作。程序使用以下代码检查菜单项的点击次数:

if event.type == pygame.MOUSEBUTTONDOWN:
            mousePos = pygame.mouse.get_pos()
            for item in buttons: # For each button
                X = item.getXPos() # Check if the mouse click was...
                Y = item.getYPos() # ...inside the button
                if X[0] < mousePos[0] < X[1] and Y[0] < mousePos[1] < Y [1]:
                    # If it was
                    item.action(screen) # Do something

当用户点击“Play Game”按钮时,它会打开一个子模块playGame.py。在这个子模块中是另一个pyGame循环等。

游戏的一部分是按住鼠标左键从当前位置“增长”圆圈(这是一个益智游戏,它在上下文中是有意义的)。这是我执行此操作的代码:

mouseIsDown == False
r = 10
circleCentre = (0,0)

[...other code...]

if mouseIsDown == True:
    # This grown the circle's radius by 1 each frame, and redraws the circle
    pygame.draw.circle(screen, setColour(currentColourID), circleCentre, r, 2)
    r += 1

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        runningLevel = False

    elif event.type == pygame.MOUSEBUTTONDOWN:
        # User has pressed mouse button, wants to draw new circle
        circleCentre = pygame.mouse.get_pos()
        mouseIsDown = True

    elif event.type == pygame.MOUSEBUTTONUP:
        # Stop drawing the circle and store it in the circles list
        mouseIsDown = False
        newCircle = Circle(circleCentre, r, currentColourID)
        circles.append(newCircle)
        circleCount += 1
        r = 10 # Reset radius

我遇到的问题是用户从主菜单中单击鼠标左键会持续进入playGame.py模块,并导致它创建并存储一个半径为10且位于(0,0)的新圆圈)。这两个都是默认值。

仅在菜单后的一帧发生。

有没有办法阻止这种情况,还是我的代码中存在缺陷?

所有人都非常感谢,一如既往。如果您需要更多代码或解释这些代码段,请告诉我。

如果你想要完整的代码,那就是on GitHub

2 个答案:

答案 0 :(得分:2)

您可以在菜单中使用MOUSEBUTTONUP而不是MOUSBUTTONDOWN。

答案 1 :(得分:1)

pygame.event.clear()的顶部添加Play会修复它吗?