試行中に反応してもらいたいが,参加者ごとに試行の実施時間が異なるのを避けたいので,試行の時間は固定したいという場合があります。例えば,クイズを呈示して,回答を思いついたらスペースを押してもらう手続きにおいて,スペースを押したとしても(押さなかったとしても),試行開始から30秒経った場合のみ試行終了するという手続きです。この時,回答を思いついた時間(スペースが押された時間)も記録したいとします。
まず,この試行についてはGUIで「Behavior」にTimeoutとして「30000」と入力し,30秒の制限時間を設定しておきます。そして,Scriptsに「before:prepare」のタイミングで以下のコードを書いてください。
//before: prepare
//無反応をデフォルトで指定しておく
this.data.response = "noResponse";
this.data.responseTime = 30000;
//反応があった場合に反応記録
//反応の有無を記録する変数
let responded = false;
//スペースを押した場合
this.options.events['keypress(Space)'] = e =>
{
e.preventDefault();
//反応済みの場合は何もしない
if(responded)
{
return
}
//反応していない場合(初回)
else{
this.data.response = "responded";
this.data.responseTime = e.timeStamp - this.internals.timestamps.show;
responded = true;
}
}
このコードでは,まず,最初に無反応時のデータを仮にいれておきます。この試行は30秒(30000ms)の試行なので,無反応で時間経過した場合は無反応(noResponse)を反応として記録し,同時に試行の制限時間(30000)を(無)反応時間として記録しています。何も反応がない場合はこのデータが記録されます。スペースが押された場合で,かつ,そのスペース押下が初回だった場合には反応あり("respondend"
)と記録し,その反応時間も記録します。e.timeStamp - this.internals.timestamps.show
という式は,実験開始から反応取得時点までの経過時間(e.timeStamp
)から,実験開始からこの試行開始時までの経過時間( this.internals.timestamps.show
)を引くことで,反応時間を計算するためのものです。2回目以降のスペースが押された際に反応記録が上書きされないように,responded
という変数でロック処理も行っています。「反応済みの場合は何もしない」というところなどを参照してください。
余裕があれば後日,デモとコードを追加します。
©2021 Masanori Kobayashi