Манипулировать представленным таймером в психопатическом эксперименте

#python #psychopy

#python #психопия

Вопрос:

В эксперименте участники видят отображение прошедшего времени в правом верхнем углу экрана. Моя цель — манипулировать этим отображением в разных условиях. В деталях, в одном условии истекший таймер должен идти в 1,2 раза быстрее, в другом условии, только в 0,8 раза быстрее, чем в реальном времени. Конечно, таймер все равно должен отображать только полные числа (1,2,3 и т.д.) без десятичных знаков. Какой простой способ реализовать это?

Я пытался добавлять или умножать таймер на константу, но это приводит к большому количеству десятичных знаков. Если бы я округлял эти числа в большую или меньшую сторону, таймер больше не был бы точным, поскольку каждое увеличение таймера не обязательно равнялось бы, например, 1,2 секунды.

Комментарии:

1. Запускайте таймер быстрее (скажем, каждые 10 мс), но показывайте только полные секунды. Таким образом, вы можете многократно увеличивать скорость прошедшего времени, не разрушая отображение.

2. Я не понимаю вашей проблемы. Почему ваше время задержки должно иметь какое-либо отношение к отображаемому значению? Просто настройте таймер, который выполняет что-то каждые N секунд (.8, 1, 1.2 и т. Д.), Где это «что-то» должно увеличивать отображаемое число на 1.

3. @Steve я предполагаю, что они начали с фиксированного таймера 1s, и оттуда поступают проблемы.

Ответ №1:

Создайте два текстовых стимула PsychoPy и таймер PsychoPy. В цикле обновите текстовые стимулы текущим значением времени из объекта Clock. Это всего лишь время в секундах, начиная с 0, поэтому вы можете просто умножить его на константу, чтобы получить желаемое замедление времени. например

 from psychopy import visual, event, core

win = visual.Window(units='height')
normal_text = visual.TextStim(win=win, pos=(0, 0.1))
faster_text = visual.TextStim(win=win, pos=(0, -0.1))

timer = core.Clock() # starts here at 0. Can be reset to 0 if needed.

# run until a key press:
while not event.getKeys():
    # update the time value:
    current_time = timer.getTime()

    normal_text.text = round(timer.getTime(), ndigits=1)
    faster_text.text = round(timer.getTime() * 1.2, ndigits=1)

    # display them on screen:
    normal_text.draw()
    faster_text.draw()
    win.flip()
  

Вы должны видеть, что когда отображается один текстовый стимул 12.0 , другой все еще включен 10.0 .

Повторите ваши проблемы с округлением, обратите внимание, что вы можете указать функции округления округлять до определенного количества знаков после запятой, как указано выше, но также вы должны выполнить умножение перед округлением, иначе количество цифр действительно снова вырастет.