Bu proje farklı parçalara ayrılacak. Heroku'ya kısa bir giriş yapacağız, Physij'lerin üç.j'le nasıl kullanılacağını göstereceğiz, node.js üzerindeki soket olaylarını nasıl kullanacağınızı ve ayrıca gönderilen verileri nasıl ele aldığımızı açıklayacağız.
Bu proje barındırılacak Heroku , bu, uygulamalarınızı barındıracak bir bulut platformu. Ruby, Java, PHP ve Python gibi çok çeşitli desteklenen dillere sahiptir. Node.js. kullanacağız.
Bir hesap için kaydolun ve node.js. Bu proje için ücretsiz olan Temel Sunucuyu kullanabiliriz. Kayıt yaptıktan sonra, uygulamanızı oluşturabileceğiniz gösterge panelinize geleceksiniz. Bu, Herokuapp.com'da bir alt etki alanı oluşturacaktır.
Bir dağıtım yöntemi olarak, Git deposunu kullanarak dağıtmak için Heroku komut satırı arayüzünü (CLI) kullanmayı veya GitHub veya Dropbox'a ayarlanmış bir bağlantıyı kullanmayı seçebilirsiniz. Cli ile gitmeyi seçtim; Bu bir kurulum gerektirecektir. Ancak karşılığında, çeşitli yeni yararlı araçlar elde edersiniz, bunlardan biri terminalinizde canlı hata ayıklama.
Sunucunuzu ayarlamak için adımları izlemenizi tavsiye ederim. burada açıklandığı gibi .
Dağıtmak için varsayılan GIT komutlarını kullanın. Kullandığınız her biri, derleme sunucusunu tetikler ve uygulamanız Heroku sunucusuna dağıtılır ve ardından alt etki alanınızdan görüntülenebilir.
Kod dağıtıldıktan sonra, projenizi [YourProject] .Herokuapp.com adresinden görüntüleyebilirsiniz. Günlükleri görüntülemek için, terminalinizdeki 'Heroku Günlükleri - Kuyruk' komutunu kullanın. Gösterilen şeylerden bazıları, müşteriye sunulan şeydir - soket bağlantılarını gösterir ve kodunuzu hata ayıklamak istiyorsanız, terminale çıkarmak için konsol.log'u da kullanabilirsiniz.
En popüler kullanacağız Webgl çerçeve, üç.js , fizik ekleyeceğimiz bir nesneyi içeren bir 3d sahne oluşturmak için. Seçim Fizik Kütüphanesi Physijs , üç.j için bir eklenti. Üç.JS'ye bir uzantı olarak, Physijs aynı kodlama sözleşmesini kullanıyor, üç.js ile zaten aşinassanız kullanmayı kolaylaştırır.
İlk şey bilardo masası. Physijs kullanıyoruz Heightfieldmesh , çünkü bu örgü, uçaktaki yüksekliği okuyacaktır. Bu yüzden temelde kendisini üç.js nesnesinin etrafına saracak.
Var steaseometrisi = yeni üç.panjometri (650, 500, 10, 10);
var tablatı = phyjs.creatatı (
yeni three.MeshphongMaterial ({
Parlaklık: 1,
Renk: 0xB00000,
Emvissive: 0x111111,
Yan: üç.Doubleide
}),
.8, // sürtünme
.4 // iadesi
);
Tablo = yeni physijs.heightfieldmesh (steaseometri, tablatı, 0);
Yani Heightfieldmesh Bir geometri, aynı zamanda bir phyji malzemesi gerektirir. Üç.js malzemesine iki yeni özellik ekliyoruz. Bunlar sürtünme ve iade değişkenler. Sürtünme, nesnenin yaptığı dirençtir ve restitüsyonun 'sıçrılık' anlamına gelir. Bu iki değişken, fiziğin sahnede nasıl hisseteceğini tanımlayacaktır.
Oluşturulan havuz topları için onları çok kabarık yapmak istemiyoruz, bu yüzden sayıyı düşük tutun. Üç.js gibi, Physijs ayrıca orijinal mesh etrafında dolaşmak için bir dizi temel şekil vardır. Spheremesh sarma Küreometri top fiziğini verecek. Sahneyi başlatırken, biz diyoruz. Buildball (8) , aşağıdaki işlevi tetikleyecek ...
Var Buildball = Function (Numberball) {
var BallTexture = yeni üç.Texture ();
var balindex = top. Uzunluğu;
Doku ekleyin:
BallTexture = three.ImageUtils.loadTexture ('Dokular /' + '+ Numberball +' _ball.jpg ', İşlev (Resim) {
baltaxture.Image = görüntü;
});
Bazı terbiyeli sürtünme ve sıçrama özellikleri ile Phyjijs özellikli malzemeyi oluşturun:
var BallMaterial = Physijs.Creatalial (
yeni üç.MeshlambertMaterial ({
Harita: BallTexture,
Parlaklık: 10,
Renk: 0xdddddd,
Emvissive: 0x111111,
Side: üç.frontside
}),
.6, // sürtünme
.5 // iadesi
);
Doku Haritalama:
ballmaterial.map.wraps = ballmaterial.map.wrapt = three.Repeatwrapping;
ballmaterial.map.Repeat.set (1, 1);
Fizik etkinleştirilmiş Spheremesh'i oluşturun ve havada başlayın:
Ball [BallIndex] = Yeni Physijs.Spheremesh (
Yeni üç.Sphereometri (25, 25, 25),
Biler,
100
);
// y tuvalin tepesine ofset
top [ballindex] .position.y = 500;
// gölgeler
top [ballindex] .Receiveshadow = true;
top [ballindex] .castshadow = true;
// topu tuvalinize ekleyin
sahne.add (top [balleks]);
};
.Jpg dosyasından doku ekliyoruz. Malzemeyi oluşturun ve Spheremesh Nesneyi dikey olarak üste yerleştireceğimiz nesneyi oluşturmak için ekrana düşer.
Sunucu ile müşteri arasındaki iletişim için kullanacağız socket.io . Bu, node.js. için mevcut en güvenilir kütüphanelerden biridir. Web Okuyucular API'sinin üstüne inşa edilmiştir.
ŞİMDİ Fizik ağlar için etkindir. Oyunu etkileşimli hale getirmek için kullanıcı girişine ihtiyacımız var. Kullandığımız giriş aygıtı mobil cihazdır. Mobil tarayıcı veri sağlayacak denetleyicidir. ivmeölçer ve jiroskoptan Oyunu göreceğiniz masaüstüne.
Öncelikle, mobil tarayıcı ile masaüstü tarayıcısının arasındaki bağlantı yapılmalıdır. Bir tarayıcı NODE.JS uygulamamızla bağlantı kurduğunda, yeni bir bağlantı yapmamız gerekiyor. Aşağıdakileri kullanarak bir istemci tarafı bağlantısı ayarlanır:
var soketi = io.connect ();
Mesajları gönderdiğiniz için yaymak İşlev:
Socket.emit ('olay adı', veriler);
Ve kullandığınız için .On () İşlev:
soket. ('Olay adı', işlev () {});
Eğer bir masaüstüysek, sunucumuza bir cihaza bir cihaz göndereceğiz. Masaüstün aşağıdaki kod satırını kullanarak oyundur.
var soketi = io.connect ();
// İlk karşılama mesajı olduğunda, 'Game' cihaz türü ile cevap verin
soket.on ('Hoşgeldiniz', İşlev (Veri) {
socket.emit ("Cihaz", {"Tipi": "Game"});
});
Sunucu bize benzersiz bir anahtar / oyun kodu iade edecek kripto tarafından üretildi . Bu, masaüstüne görüntülenecektir.
// bir kod oluştur
var gamecode = crypto.randombytes (3) .Tostring ('hex'). Substring (0, 4) .TolowerCase ();
// benzersizliğini sağlamak
süre (gamecode in socketcode) {
gamecode = crypto.randombytes (3) .Tostring ('hex'). Substring (0, 4) .TolowerCase ();
}
// Mağaza Oyun Kodu - & GT; Soket Derneği
SOCKCODES [GAMECODE] = iO.Sockets.Sockets [SOCKET.ID];
SOCKET.GAMECODE = GAMECODE
Oyun istemcisini, oyun kodunu kullanıcıya sıfırlamasını ve göstermesini söyleyin ...
soket. ("Başlat", gamecode);
Mobil cihazı oyuna bağlamak için, oyun kodunu masaüstü ekranından göndermek için bir form kullanacağız. Gönderimde, oyun kodunu kimlik doğrulaması için sunucuya göndereceğiz.
soket. ("Cihaz", {"Tip": "Denetleyici", "GameCode": gamecode});
Sunucu, oyun kodunun geçerli olup olmadığını kontrol eder ve masaüstü oyunuyla bağlantıyı kurar
Eğer (socketcode'daki cihaz.gamecode) {
// Denetleyici komutları için oyun kodunu kaydet
SOCKET.GAMECODE = Cihaz.Gamecode
// denetleyiciyi başlat
soket. ("bağlı", {});
// oyunu başlat
SocketCodes [Cihaz.Gamecode] .EMIT ("bağlı", {});
}
Bağlantının hepsi ayarlandıktan sonra, 8 topa aşağıdaki komutla x ve z'den küçük bir itme vereceğiz ...
top .SetlinearVelocity (yeni üç.Vektör3 (30, 0, 30));
Şimdi bağlantı kurulduğundan, gyro ve ivmeölçer değişkenlerini oyuna göndermek istiyoruz. Kullanarak pencere.ondivicemotion ve window.ondeviceorientation Etkinlikler, telefonumuzun aynı eğim hareketlerini havuza masasına taklit etmemiz gereken verilere sahibiz. Bu değerleri yaymak için 100ms aralığı kullanmayı seçtim.
setinterval (işlev () {
soket. ('Gyro gönder', [Math.Round (round), matematik. Yol (Rotx), AY, AX]);
}, aralıktım);
Müşteri tarafında, gelen değerleri sunucudan havuz tablosunun eğimine takılarak gecikmeyi çözeceğiz. Takviye için kullanıyoruz Tweenmax .
// Gelen GYRO verilerini işle
Socket.on ('Yeni Gyro', İşlev (Veri) {
var degy = veri & lt; 0? Matematik. (Veriler ): -Data ;
Tweenmax.to (masa.Rotation, 0.3, {
X: degtorad (Degy - 90),
Y: degtorad (veri ),
Kolaylık: linear.easenone,
OnUpdate: Function () {
Tablo .__ DirtyRotation = True;
}
});
});
Biraz daha etkileşim vermek için, kullanıcının oynaması için birkaç ekstra etkinlik ekledim. Kullanıcıya, klavyedeki numaraları kullanarak 8 topun yanında ekstra top ekleme seçeneğini vereceğiz.
Başka biri masayı yukarı doğru sıçratmak. Bunun için boşluk çubuğuna çarpabilirsiniz. Ancak biz de denetleyici cihazında bir musluk etkinliği ekliyoruz. Bu, bilardo masasına bir etkinlik gönderir, bu da masayı yükseltir ve topları gönderir.
İlk önce klavye olaylarını yakalamamız gerekiyor ...
// Boşluk Çubuğu'ndaki Topları / Slam Masası Oluşturun
belge.addeventListener ('KeyDown', Function (E) {
if (e.keycode == 49) {// tuşu: 1
buildball (1);
} Diğer ise (e.keycode == 50) {// tuşu: 1
Buildball (2);
} Diğer ise (e.keycode == 51) {// tuşu: 1
buildball (3);
} Diğer ise (e.keycode == 32) {// tuşu: Ara Çubuğu
bouncetable ();
}
});
iniltiball Fonksiyon, Küre 8 topunu oluşturmak için kullandığımız işlevdir. Sadece küreyi saracak farklı dokular kullanıyoruz. Tablayı yukarı iterek, tabloya bu kodla Y ekseni boyunca yukarı doğru bir hareket veriyoruz ...
Tablo.SetlinearVelocity (yeni üç.Vektör3 (0, 500, 0));
Bir oyun ya da başka bir şey için bir konseptiniz olduğunda, orada hayatınızı kolaylaştırabilecek kütüphaneler olması muhtemeldir. Bu, bunun nasıl çalışabileceğini gösteren bir demodur. Umarım bu, bazı yaratıcı fikirlerin kıvılcımlarına veya mevcut projenizde size yardımcı olacağını umuyoruz. Oyunun canlı bir örneğini görün İşte ya da üzerinde bul Github .
Bu makale başlangıçta 300 sayısında yayınlandı. ağ , dünyanın profesyonel web tasarımcıları ve geliştiricileri için en iyi dergisi. Sayı satın al 300 veya abone olun .
İlgili Makaleler:
Image: Getty Images Varsayımlar iş için kötüdür. Kötüler çünkü doğası gereği, dünyayı ve önyargılar..
Photoshop'ta bir logoyu nasıl yapacağınızdan önce, odadaki filleri ele almalıyız - Photoshop CC akılda log..
Bu eğitimde, bir Elf Maiden'ın büyüleyici bir fantezi portresi oluşturma sürecinde sizi yönlendireceğim. Hikayesi, bazı ..
Bir mandelbulb, giderek daha popüler hale gelen üç boyutlu bir fraktaldır. 3d sanat ve vfx. Bu yazıda, bir ma..
Bu Geisha illüstrasyonunda, zarif geleneksel Japon elemanları ile bağlanmış aşınmış, karanlık, kentsel bir vibe yakalam..
Açılış sayfanızda çok önemli bir unsurdur. Web Sitesi Düzeni . İşinizi veya sattığınız ürünü tan�..
Ekran tasarımı son birkaç yılda uzun bir yol kat etti. Heck, birkaç yıl önce 'ekran tasarımı' bile söylemedik. Grafik t..