2016-03-20 17 views
1

Oyun geliştirmeye online gelişiyorum. Çevrimiçi bir FPS oyunu yapmaya çalışıyorum ve sadece karakterimi güncellemem gereken noktaya geldim. Sadece bir çizim ve güncelleme işlevini kullanarak kodumu basit tutmaya çalışıyorum. html yükler, ben yürütme zaman hem:Javascript güncelleştirme işlevleri

<body onload='DRAW(); UPDATE();'> 

beraberlik işlevi ekranına oyuncu çeker (? Bu gerekli mi) ve güncelleme karakteri taşımak için bir tuşa basma için kontrol gerekiyordu. Ben kullanarak komut dosyası güncelleme yapmaya çalışıyorum bu:

function UPDATE() 
{ 
    update = setInterval(UPDATE, 60); 
} 

ve bildiğim için

, bu iyi çalışıyor ben siteyi test etmek kullanın benim online IDE (c9.io) 'de denemek ve kod düzenle zaman çünkü site çalışırken donuyor. Ayrıca, drawListeners öğesini draw işlevinde arıyorum. (Ben aşağı bir anahtar her kare için test etmek istiyorum bu doğru mi olur?)
function DRAW() 
{ 
    window.addEventListener('keydown', function (e) { 
     keys.keys = (keys.keys || []); 
     keys.keys[e.keyCode] = true; 
    }); 
    window.addEventListener('keyup', function (e){ 
     keys.keys[e.keyCode] = false; 
    }); 
} 

Benim sorulara

şunlardır:

  • bir komut dosyası güncellemesi her çerçeve yapmak için daha kolay bir yolu var mı?

  • Bir JavaScript eklentisi var mı (Three.js gibi) bunu daha kolay geliştirmek için kullanabilir miyim?

Herhangi bir bilgi büyük beğeni topluyor.

cevap

0

Bu her şeyin kazasında yapar: Sen damgası her 60 ms yeni aralığını yaratıyor

function UPDATE() 
{ 
    update = setInterval(UPDATE, 60); 
} 

; UPDATE'i ilk kez aradığınızda, her 60 ms'de yeni bir aralık oluşturan bir aralık yaratırsınız. Tüm yeni oluşturulan aralıklar aynı şeyi yapar. Gerçekten burada ne yapmak istediğini gerçekten bilmiyorum.

Ayrıca, drawListeners öğesini draw işlevinde arıyorum. (Ben aşağı anahtar için her kareyi test etmek istiyorsanız bu doğru mi?)

Bu beraberlik fonksiyonunda Olay Dinleyicilerine oluşturmak için sadece bir kez bu işlevi çağırmak sağlanan iyi. Hangi sanırım yapmıyorsun. DRAW() öğesini her aradığınızda yeni bir dizi etkinlik listesi eklenecek ve gerçekten bunu istemiyorsunuz.

İhtiyacınız olan şey bir oyun döngüsü türüdür. Bir FPS oyunu nasıl oluşturulacağını anlatan Yapabileceğim biraz daha, ama bu makalede de Anatomy of a video game

+0

DRAW() yalnızca (bildiğim kadarıyla) HTML kısmında kez arayarak edilmelidir bakarak başlayabilir setInterval hakkında bilgi için teşekkürler. Düştüğünü biliyordum, nedenini anlayamadım. –

+0

@TaylorBrown makalesini bir nükleer zincir reaksiyonuna eşdeğer olarak düşüneceğim. Sadece 960 ms için koştuktan sonra, zaten paralel olarak çalışan 65536 aralığınız var ve her 60 saniyede iki katına çıkmaya devam ediyor. Bilgisayarınız bunu kaldıramıyor ve tarayıcı çöküyor. – dannyjolie

+0

İyi bir benzerlik, şimdi daha mantıklı. –

İlgili konular