1

私は PsychoPy を使用しており、マウスがクリックされたときにマウスの位置を出力したいと考えています。

位置の実際の出力は、while ループ内に配置する必要があります。以下のコードを使用してクリックすると、同じ位置を出力する複数の出力行が表示されます。クリックごとに出力を 1 つだけ印刷したいと考えています。

これは私が使用しているコードです:

#!/usr/bin/env python2
from psychopy import visual, core, event
from pyglet.gl import *

width = 600
height = 600
myWin = visual.Window([width,height], color='white',units='pix',monitor='testMonitor')

#This will set the windows units (pixels) to GL units
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0, width, 0, height, -1, 1)

glMatrixMode(GL_MODELVIEW)
glLoadIdentity()

glEnable(GL_BLEND)
glBlendFunc(GL_ZERO, GL_SRC_COLOR)

myMouse = event.Mouse()  #  will use myWin by default


while True:
    #Triangle left
    glColor3f(1.0, 0.0, 0.0)
    glBegin(GL_TRIANGLES)
    glVertex3f(150, 550, 1)
    glVertex3f(50, 350, 1)
    glVertex3f(250, 350, -1)
    glEnd()

    if myMouse.getPressed()[0]:
        myMouse.clickReset()
        print myMouse.getPos()

    myWin.flip()

core.quit()

私がやっていることは何か間違っていますか?while ループの「フレーム レート」を変更する必要がありますか?

4

3 に答える 3

3

Veedracの答えは正しいです。コードは、ウィンドウが再描画されるたびにイベントをチェックする典型的な PsychoPy パターンを使用しています。これは通常、少なくとも 60 Hz で発生します。そのため、マウス ボタンを 16.7 ミリ秒未満 (より高速な画面の場合はそれ以下) 押さない限り、連続するウィンドウの再描画をチェックするたびにマウス ボタンが押されたままになるため、押されたことが複数回検出されます。一度だけ押されたとしても、押されている時間は一瞬ではありません。

したがって、Veedrac が提案するように、マウス ボタンの以前の状態を変数に保持して、位置を 1 回だけ出力することを選択できるようにする必要があります。Mouseup イベントはここでは関係ありません。ボタンが現在押されているかどうかを純粋にテストしています。

于 2014-05-02T09:34:24.143 に答える