플레이어 캐릭터가 좌우로 움직이는 게임을 만들고 있습니다. 단순히 onKeyDown에의 EventListener가 끊기 내 캐릭터 이동했고,requestAnimationFrame이 의도 한대로 작동하지 않습니다.
그러나 다른 답변 (How can I move my JS objects smoothly using keyboard input?)에 의해 제안 약간의 지연, 나는 가능한 한 자주 이동 함수를 호출 할 requestAnimationFrame을 사용하여 시도 사용하기 때문에, 그것은 아무것도 바뀌지 않았습니다. 은 여기 내 자바 스크립트 코드
var NodoCampo = document.getElementById("campo");
var NodoGiocatore = null;
var Left = false;
var Right = false;
var FRAMERATE = 20;
//cache giocatore
var LARG_GIOCATORE = 30;
var ALT_GIOCATORE = 30;
var X_GIOCATORE = 300;
var Y_GIOCATORE = 1100;
var VEL_GIOCATORE = 10;
function mostra_giocatore() {
if (NodoGiocatore === null) {
NodoGiocatore = document.createElement('div');
NodoGiocatore.setAttribute ('id', 'player');
NodoCampo.appendChild (NodoGiocatore);
}
NodoGiocatore.style.marginLeft = (X_GIOCATORE - LARG_GIOCATORE) + 'px';
NodoGiocatore.style.marginTop = (Y_GIOCATORE - ALT_GIOCATORE) + 'px';
}
function muovi() {
if (Left) {
X_GIOCATORE = X_GIOCATORE - VEL_GIOCATORE;
//aggiorno immagine
mostra_giocatore();
}
else if (Right) {
X_GIOCATORE = X_GIOCATORE + VEL_GIOCATORE;
//aggiorno immagine
mostra_giocatore();
}
}
function stop() {
Left = false;
Right = false;
}
function interfaccia(e) {
//freccia sinstra
if (e.keyCode === 37) {
X_GIOCATORE = X_GIOCATORE - VEL_GIOCATORE;
//aggiorno immagine
mostra_giocatore();
}
//freccia destra
else if (e.keyCode === 39) {
X_GIOCATORE = X_GIOCATORE + VEL_GIOCATORE;
//aggiorno immagine
mostra_giocatore();
}
}
function inizia() {
mostra_giocatore();
requestAnimationFrame(muovi);
}
window.document.onkeypress = interfaccia;
window.document.onkeyup = stop;
onkeydown은 변수를 설정해야합니다 (예 : horizontalSpeed = 10). 그런 다음 requestanimationframe에서 속도로 위치를 조정하십시오. – Kokodoko