2016-05-03 26 views
1

マウスの位置を使ってゲームを実装しようとしていますが、ユーザーがボタンをクリックしたかどうかを確認しようとしています。何とかマウスの位置が数秒間更新されず、さらに数秒間新しい位置に変更され、繰り返されます。私は移動し、画面内の別の場所でマウスを押したが、マウスの位置は全く変わらなかった。 (Python3.5.1とPygame 1.9.2でIDE PyCharmを使って作業する)どんなアイデアですか?ここ は私のコードです:Python Pygameマウスの位置が更新されない

done = False 
while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 
    mouse = pygame.mouse.get_pos() 
    click = pygame.mouse.get_pressed() 
    if click[0]==1: 
     print(mouse) 
    pygame.display.update() 
+0

パイゲームウィンドウ内をクリックしていますか? –

答えて

-1

あなた

mouse = pygame.mouse.get_pos() 
click = pygame.mouse.get_pressed() 

のみコール時の状態を取得します。ドキュメントhttp://www.pygame.org/docs/ref/mouse.htmlあたりのとおり:

マウスイベントのすべてのどちらか pygame.event.wait()またはpygame.event.getを使用することをお勧めします()を取得し、

これらのイベントのすべてをチェックします

これは、プログラムが処理するためにクリックが保存されていないためです。あなたは幸運になるとそれを見るだけで、ボタンが実際に機能していないときにプログラムがこの関数を呼び出します。 pygameのダウンロードに入力イベントを処理する方法は2つあります

+1

私は自分のコードを変更しました:pygame.event.get()のイベント:if event.type == pygame.MOUSEBUTTONDOWN:pos = pygame.mouse.get_pos()..私はまだ同じ問題を抱えています。 – lanlan2271

0

  • 州立チェック
  • イベント、それがどのように動作するかをより良く理解するために

の取り扱い:あなたが使用 http://www.pygame.org/docs/tut/newbieguide.html#managing-the-event-subsystem

あなたのコードの両方で、状態チェック:

mouse = pygame.mouse.get_pos() 
click = pygame.mouse.get_pressed() 

イベント処理:

clock=pygame.time.Clock() 
clock.tick(60) # 60 frames per second 

をので、位置の更新が良くなるはずです。

for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 

あなたはまだあなたが追加することができ、マウスの位置を取得するためのチェック状態を使用したい場合。

+0

ありがとう!私は時計を追加しましたが、マウスの位置はまだ非常にゆっくりと変化しました。他に何が間違っているのでしょうか? – lanlan2271

0

ボタンがRECTを持っているなら、あなたは(rect.collidepointを使用することができます)このようにチェックイベントと方法:

mouse_pos = pygame.mouse.get_pos() 

    if event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0] and button.rect.collidepoint(mouse_pos): 
-1

これは、基本的なpygameのマウス取得プログラムを示しています。単純に印刷されているウィンドウ内の任意の場所をクリックすると、マウス座標:

import pygame as py 

py.init() 

white = (255,255,255) 

window = (400,400) 
screen = py.display.set_mode(window) 

clock = py.time.Clock() 

done = False 
while not done: 
    for event in py.event.get(): 
     if event.type == py.QUIT: 
      done = True 
     elif event.type == py.MOUSEBUTTONDOWN: 
      print py.mouse.get_pos() 
    screen.fill(white) 
    py.display.flip() 
    clock.tick(30) 

py.quit() 

希望このことができます:)

+1

OS X El CapitanのAnaconda経由でPython 3.5.2でPyGame 1.9.2a0でこの正確なコードが正常に動作しない理由はありますか?それは '作品'ですが、繰り返しクリックしてマウスを動かすと、マウスの位置が更新されます。それ以外の場合は、どこでクリックしても同じ位置を報告し続けます。動作のGIFについてはこちらをご覧ください:[link](https://dl.dropboxusercontent.com/u/1049625/OddBehaviorPygameMouse.gif) – TSeymour

1

イベントMouseMotionが実行されない限り、コール

mouse = pygame.mouse.get_pos() 

位置を更新しません。

MACのウィンドウでプログラムを実行している場合、マウスを押して保持し、移動する必要があります(マウスを押したままにしておき、マウスを移動すると、pygame.mouse.get_pos()は現在のマウス位置を返します)。

+0

本当ですか?なぜドキュメントのこの動作について何も言わないのですか? https://www.pygame.org/docs/ref/mouse.html#pygame.mouse.get_pos説明どおりに動作することは確認できます。 Windowsマシンではこの動作が異なりますか? – allcaps

関連する問題