[]

Javascript (çapraz gitme)

ilk kez oyun üretmeye başladım javascriptte. gerçi oyun bile denemez şuan, deneme tahtası diyelim.

şimdi, bazı istediğim şeyleri gerçekleştireibldiğim için mutluyum.

ama bir şeyi başaramadım: çapraz gitme.
üst ve sağ tuşuna aynı anda basmayı nasıl tanımlattırabilirim bilmiyorum.

if(key == "39" && key == "40")

dedim, ama olmadı. sonradan düşününce ne kadar saçma bir düşünce olduğunu da anladım. yerine alternatif nasıl bir şey kullanırım diye düşündüm, bulamadım.

çapraz gitme olayını nasıl tanımlattırabilirim?

 
fazla tekniğe girmeen, fikir olması açısından:
javascript her koşulda iki tuşun da sırayla basıldığını düşünecek.

mesela basılı tutma durumunda (onkeydown) şöyle olabilir;
sağ ve üst olarak düşün. isRightPressed ve isUpPressed gibi iki değişken olsun.

sağ oka basınca isRightPressed'i true yap. üste basınca da isUpPressed'i true yap. ikisinin de true olduğu zaman çapraz gitsin.

/***/
if(isRightPressed && isUpPressed){
çapraz git
}
else if(isRightPressed){
sağa git;
}
else if(isUpPressed){
yukarı git.
}
/***/
gibi

ikisinin aynı anda basılması teknik olarak mümkün değil. eğer basılı tutarak değil kademe kademe ilerleme istiyosan (yani bas çek bas çek gibi), basılan zamanları unixtime/mikrosaniye cinsinden tutup, aradaki farka göre karar verebilirsin.

/***/
rightPressedAt = 1
upPressedAt = 2

if(upPressedAt - rightPressedAt <= 1){
çapraz git
}
else ...
/***/
gibi
  • lord esseginziki  (12.06.13 22:57:56 ~ 23:00:23) 
peki ya, basılı tutmaya dair hangi fonksiyon işimi görür?

örnek: "x" tuşuna bastım, fonksiyon devreye girdi. parmağı çektim, fonksiyon iptal.

genelde, tuş basar basmaz işleyen (ve çekip çekmememle ilgilenmeyen) veya basılı tuttuğumda ve sadece parmağı çektiğimde tetiklenen fonksiyonlar var.

ama basmaya başlamamla birlikte başlayıp parmağı çekmemle kesilen bir şey yok?
  • kamera motor  (12.06.13 23:05:41) 
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.
  • sterimar  (12.06.13 23:19:44 ~ 23:25:36) 
şurda problemle ilgili güzel bir yapı oluşturulmuş aslında, onu da kullanabilirsin.

basılan tuşları bir object'te saklıyor, bırakıldığında da siliyor.

yani keys dizisinde o anda basılı tuşlar oluyor her zaman.

senin yapman gereken oyun akışı içinde keys içindeki değerleri kontrol etmek.
  • ocanal  (12.06.13 23:28:07) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.