keydown eventinde hangi yon tuslarina basildigini true, keyup eventinde de kullanicinin hangi yon tuslarini kullanmayi biraktigini false seklinde global degiskenlere ata. sonra keydown eventinde eger basilan tus yukari ise, sag veya sol tusun true olup olmadigini, sag veya sol tus ise de yukari veya asagi tusun true olup olmadigini kontrol et. bu sekilde ikisine birden basilip basilmadigini anlayabilirsin. yani;
var up, down, right, left = false, false, false, false;
window.onkeydown(function(event){
if(event.keycode == "39"){ // sag tusu temsil eden keycode. deger gercek olmayabilir, temsili olarak yazdim.
right = true;
if(up == true){
direction = 1; // sag ustu temsil eden bir deger;
}
else if(down == true){
direction = 2; // sag alti temsil eden bir deger.
}
else{
direction = 3; // sagi temsil eden bir deger.
}
}
});
window.onkeyup(function(event){
if(event.keycode == 39){
right = false;
}
});
keyup ve keydown eventlerinde diger yon tuslari icin de ayni if checkleri yapman lazim.
son bir sey daha var: iki tusa ayni anda bassan bile isletim sistemi bu eventleri sirayla isleme koyar. dolayisiyla sag uste gitmek istediginde once sag sonra yukari veya once yukari sonra sag tus icin keydown eventi tetiklenecektir. bu yuzden capraz gitmeden once cok kisa bir sureligine hareket eden oyun nesnesinin once saga veya yukari(hangisinin eventi once tetiklendiyse) gitmesi soz konusu olabilir. ama bu oyunun fps degerine de baglidir. yani sen her 10 ms' de bir hangi tuslara basildigini kontrol ediyorsan ve yukari tus ile sag tus arasinda 3 ms' lik bir fark var ise, o zaman biraz once dedigim sorunla karsilasmazsin. ama tam tersi olursa, yani 3 ms' de bir hangi tuslara basildigini kontrol ediyorsan ve yukari tus ile sag tus arasinda 10 ms' lik bir fark varsa, kontrol edilen oyun nesnesi bir sureligine saga veya yukari gidecektir.
not: kodda kullanilan bazi ozelliklerin veya fonksiyonlarin isimleri degisik olabilir. mesela keycode yerine sadece key kullanilabilir. bunu pseudocode olarak dusun.
0