是的,这个标题根本没有措辞。
好的,这就是我们所拥有的 - 使用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。
答案 0 :(得分:2)
您可以在菜单中使用MOUSEBUTTONUP而不是MOUSBUTTONDOWN。
答案 1 :(得分:1)
在pygame.event.clear()
的顶部添加Play
会修复它吗?