первое нажатие клавиши игнорируется - PullRequest
1 голос
/ 22 апреля 2020

Подведите итог проблемы: (Новое для js - я попытался найти ответ здесь, но я не уверен, не понимаю ли я поведение клавиш или мой код не работает.) Я пытаюсь переместить объекты на экран. Вместо того, чтобы реагировать на нажатие клавиш или нажатие клавиш (я пробовал оба), объект перемещался только после того, как я нажал другую клавишу. Это было бы хорошо для перемещения объекта, но я также пытаюсь заблокировать ответ после нажатия пробела, который также не работает.

Это используется Chrome Версия 81.0.4044.92 на Macbook Pro

Опишите, что вы пробовали: я пытался использовать как keyup, так и keydown.

Когда это уместно, покажите код:

var angle;
var myx;
var myy;
var LocCol;
var LocCol2;
var _resp_test_allKeys;
var TestComponents;
// FRR ----- manual entry BEGIN; copy this before "function TestRoutineBegin(trials) {" 
// code to move stimulus
var xforce; 

xforce = 0; // initially set speed ('force') to 0. It increases in steps of 1 as long as key is down

function  resetXforce(event){
    xforce = 0 // if finger has been lifted, go back to speed 0
}
function  getKeyResponse(event){ // check for responses
        var thisResp = psychoJS.eventManager.getKeys();
        console.log(thisResp)
        if ("left" == thisResp[0]) {
                xforce--;  // decrease angle with increasing acceleration the longer key pressed
                angle = (angle + xforce); //plus not minus here since xforce may become negative
                myx = (0.25 * Math.sin((((Math.PI * 2) * angle) / 360)));
                myy = (0.25 * Math.cos((((Math.PI * 2) * angle) / 360)));
                //smallcircle2.setPos([myx, myy]);
                image_on_circ_test.setPos([myx, myy]);

                }
        if ("right" == thisResp[0]) {
                xforce++; //increase angle with increasing acceleration the longer key pressed
                angle = (angle + xforce);
                myx = (0.25 * Math.sin((((Math.PI * 2) * angle) / 360)));
                myy = (0.25 * Math.cos((((Math.PI * 2) * angle) / 360)));
                //smallcircle2.setPos([myx, myy]);
                image_on_circ_test.setPos([myx, myy]);
            }
    // for some reason this only responds on second keypress? 
    /* if ("space" == thisResp[0]) {
            LocCol2 = 'white'  // if response locked with spacebar
        } */

    if (psychoJS.eventManager.getKeys({keyList:['space']}).length > 0) {
        LocCol2 = 'white'  // if response locked with spacebar
        }

        //psychoJS.eventManager.clearEvents({eventType:'keyboard'});
    }
document.addEventListener("keydown", getKeyResponse); //tried keydown as well, with the same problem
document.addEventListener("keyup", resetXforce);
// FRR ----- manual entry END ----- 

...