2011-04-21 15 views
0

はい、そのタイトルは全く正しく言い表されていませんでした。PyGame MOUSEBUTTONDOWNイベントのメニューに問題があります

ここにあるのは、pyGameライブラリを使ったPythonプログラムです。私たちはゲームを作っています。メニュー環境main.pyから始めます。ユーザーがメニューボタンの1つをクリックすると、アクションが実行されます。次のコードを使用してメニュー項目のクリックのためのプログラムのチェック:ユーザーが「ゲームをプレイ」ボタンをクリックすると

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 

、それがサブモジュール、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)にある。どちらもデフォルト値です。

これは、メニューの後の1フレームでのみ発生します。

これを防ぐ方法はありますか、それともコードに欠陥がありますか?

いつものように、大変助かりました。これらのスニペットのコードや説明が必要な場合は、教えてください。

フルコードをご希望の場合は、on GitHubです。

答えて

2

メニューのMOUSBUTTONDOWNではなくMOUSEBUTTONUPを使用できます。

1

pygame.event.clear()を先頭に追加しますか?Playはそれを修正しますか?

+0

これは有効な回答ですが、メニューをクリックした後でもマウスボタンを押したままにしているため、直後に新しい「MOUSEBUTTONDOWN」イベントが作成されるため、プロジェクト内では機能しない恐れがあります。しかし、ありがとう! – nchpmn

関連する問題