我正在做一个实验,根据人们对目标的反应速度给他们打分。他们的反应越快,他们获得的积分就越多。在这种"蓝色"状态下,分数从8000分开始,他们的反应越快,他们获得的分数就越多。这些点在每次试验后显示在屏幕上。
我要创建一个新的变量,它是一个累积分数,所以在实验结束时,我可以告诉他们总获得的积分。
我已经创建了这个检索变量,我想在累计总数中使用它。然而,在实验结束时,它只是显示最后计算的分数(pointConvertedBlue
)并将其加倍(例如,如果有3次试验中有人获得:试验1 = 6000,试验2 = 6432,试验3 = 5690,则"总分";成为11380年).
我是一名心理学研究人员,所以我的编码技能很粗糙,所以我真的不确定如何解决这个问题。如果有人有任何建议,我将非常感激!
第一部分代码是我每次试验所需要的。这就是我试图在循环中创建累计总数的地方。
if (row.display == _requiredFeedbackDisplay) {
if (screenIndex == _requiredFeedbackScreen) {
if (row.TrialNumer >= 1 && row.TrialNumer <= 30) {
// Retrieve the reaction time from the store
var lastRT: number = gorilla.retrieve(_RTKey, null, false);
var roundedRT: number = Math.round(lastRT);
var pointConvertedBlue: number = 8000 - roundedRT;
gorilla.store(EMBEDDED_DATA, pointConvertedBlue, true);
var retrievedValue: number = gorilla.retrieve(EMBEDDED_DATA, 0, true);
if (retrievedValue != 0) {
retrievedValue += pointConvertedBlue;
}
gorilla.store(TOTAL_SCORE, retrievedValue, true);
// We now add the rounded reaction time to the screen
$(container + _requiredFeedbackZoneSelector).html(
"<h1>" +
'<p style="color: white;">' +
"You earned " +
pointConvertedBlue +
" points" +
"</p> " +
"</h1>"
);
// Using gorilla.refreshLayout here will make sure that everything is displayed nicely on the screen
gorilla.refreshLayout();
gorilla.metric({
trial_number: "pointConvertedBlue",
response: pointConvertedBlue,
});
}
}
}
下一段代码用于当我完成所有试验时,在中断屏幕上,我想显示总成绩。
if (row.display == Block_Break) {
if (screenIndex == Block_screen) {
var totalScore: number = gorilla.retrieve(TOTAL_SCORE, 0, true);
$(container + _requiredFeedbackZoneSelector3).html(
"<h1>" +
'<p style="color: white;">' +
"So far, you have earned a total of " +
totalScore +
" points" +
"</p> " +
"</h1>"
);
gorilla.refreshLayout();
}
}
值的翻倍是存储和加载操作顺序的结果:
gorilla.store(EMBEDDED_DATA, pointConvertedBlue, true);
var retrievedValue: number = gorilla.retrieve(EMBEDDED_DATA, 0, true);
if (retrievedValue != 0) {
retrievedValue += pointConvertedBlue;
}
gorilla.store(TOTAL_SCORE, retrievedValue, true);
您将pointConvertedBlue
中的最后一个分数存储在EMBEDDED_DATA
中,而不是将EMBEDDED_DATA
的值加载到retrievedValue
中。所以最后retrievedValue
和pointConvertedBlue
是一样的。我的猜测是,您在检索retrievedValue
时不小心写成了EMBEDDED_DATA
而不是TOTAL_SCORE
。您可以尝试以下操作:
gorilla.store(EMBEDDED_DATA, pointConvertedBlue, true);
var retrievedValue: number = gorilla.retrieve(TOTAL_SCORE, 0, true);
if (retrievedValue != 0) {
retrievedValue += pointConvertedBlue;
}
gorilla.store(TOTAL_SCORE, retrievedValue, true);
我曾经非常简单地使用过Gorilla API,但看起来这里的问题可能是这部分代码的语义错误:
var pointConvertedBlue: number = 8000 - roundedRT;
gorilla.store(EMBEDDED_DATA, pointConvertedBlue, true);
var retrievedValue: number = gorilla.retrieve(EMBEDDED_DATA, 0, true);
if (retrievedValue != 0) {
retrievedValue += pointConvertedBlue;
}
gorilla.store(TOTAL_SCORE, retrievedValue, true);
看起来您存储了转换后的值,检索它,并将其添加到自身。如果在对值执行操作之前不需要存储值(就像对pointConvertedBlue所做的那样),可以像这样切换行:
var pointConvertedBlue: number = 8000 - roundedRT;
gorilla.store(EMBEDDED_DATA, pointConvertedBlue, true);
var totalScore: number = gorilla.retrieve(TOTAL_SCORE, 0, true);
// don't really need the conditional because gorilla.retrieve returns '0' by default according to above param.
var newTotal: number = totalScore + pointConvertedBlue
gorilla.store(TOTAL_SCORE, newTotal, true);