
WebCraft: JavaScript ile Yazılmış Minecraft Web Klonu
"Javascript ile yazılmış Minecraft klonu."
Overv/WebCraft · github.com
Tarayıcınızda tamamen bir Minecraft deneyimi oluşturmak için neler gerekli olduğunu hiç düşündünüz mü? WebCraft tam da budur: WebGL ve WebSocket aracılığıyla çalışan, sadece modern bir web tarayıcısı gerektiren JavaScript tabanlı bir Minecraft klonu. Resmi oyundan tanıdığınız tam hayatta kalma deneyimi değildir, ancak blok tabanlı voxel dünyalarının gerçekte nasıl çalıştığını merak ediyorsanız, bu proje gerçekten öğreticidir.
WebCraft Nedir
WebCraft, vanilla JavaScript kullanarak sıfırdan inşa edilen bir Minecraft Classic tasarımıdır. Three.js yok, Babylon.js yok, ağır 3D framework'leri yok. Açık söylemek gerekirse, geliştirici render hattını doğrudan WebGL üzerine kurdu, bu da tüm bir oyun motorunu sürüklemek yerine binlerce statik küpü render etmek için çok daha verimli olduğu ortaya çıkana kadar sert görünüyor.
Proje hem tek oyunculu hem de çok oyunculu modları içerir. Çok oyunculu modda, bağlı istemciler arasında oyuncu eylemlerini senkronize etmek için Node.js arka ucu ve WebSocket'ler kullanılır. Bulduğum en ilginç şey bağımlılıkların ne kadar minimal olduğudur. Matematiksel işlemler için glmatrix ve ağ iletişimi için socket.io - hepsi bu. Diğer her şey özel koddur.
Ön etapta söylemesi çok önemli bir şey: bu proje artık aktif olarak bakım görmüyor. Depo var ve kod orada, ancak düzenli güncellemeler veya aktif destek beklememelisiniz. Eğitim amaçları veya deneme için? Değersizdir. Üretim çok oyunculu sunucusu için? Başka yere bakın.
Neden Önemli Olabilir
Aradığınız şeye bağlı olarak WebCraft'a bakmanın birkaç nedeni vardır. Oyun geliştirmeyi veya grafik programlamayı öğreniyorsanız, bu altındır. Birisinin voxel tabanlı bir dünyayı nasıl yapılandırdığını, render performansını nasıl yönettiğini, fiziği (yerçekimi, sıvı akışı) nasıl ele aldığını ve oyun durumunu istemciler arasında nasıl senkronize ettiğini görmek için alırsınız. Hiçbiri özel bir motor arkasında gizli değildir.
Sadece tarayıcınızda Minecraft oynamak istiyorsanız hiçbir şey kurmadan? Evet, deneyim orada. Dünyalar oluşturabilir, blok yerleştirebilir ve silebilir, ve eğer bir sunucu kurarsan, arkadaşlarınla oynayabilirsin. Ancak doğrudan söylemeliyim: bu bir Classic klonu, modern Minecraft değil. Hayatta kalma mekanikleri yok, canavarlar yok, ilerleme sistemi yok. Yaratıcı modunun soyulmuş bir halidir.
Oyun geliştirme etrafında kapstone projeleri yapan öğrenciler veya voxel tabanlı bir oyun konseptini prototiplemek isteyenler kod tabanını okumanın çok şey öğretebileceğini söyleyebilirim. Mimarı yeterince temiz ki, bir bloğun dünyaya nasıl yerleştirildiğini ekranda render edilmesine kadar takip edebilirsiniz.
Mimari Nasıl Çalışır
Proje, her biri oyunun belirli bir katmanını işleyen modular JavaScript dosyalarına bölünmüştür. World modülü tüm haritanız için blok verilerini tutar. Bunu, her koordinatta neyin olduğunu izleyen 3B bir dizi olarak düşünün. Render modülü bu verileri alır, bunları parçalara dönüştürür (temel olarak blok grupları), sonra WebGL'ye çizilmesi için aktarır.
Fizik simülasyonu ayrı olarak çalışır. Yerçekimi düşen blokları aşağı çeker, su ve lava basit kurallara göre akar, çarpışma algılama sizi araziden düşmekten alıkoyar. Blok tabanlı bir dünya için karmaşık fizik değildir, ancak işi görür.
Oyuncu girişi Player modülü tarafından ele alınır, bu da envanteri, seçili blok türünü ve hareketi izler. Çok oyunculu tarafında, Network modülü yerel dünya durumunuzu sunucunun bildiği şeyle karşılaştırır ve tüm bağlı oyuncular arasında değişiklikleri senkronize eder, böylece herkes aynı şeyi görür.
Bloklar Blocks modülü aracılığıyla özelleştirilebilir, burada malzeme özellikleri tanımlarsınız: renk, ışığın geçip geçmediği, nasıl render edileceği. Yeni blok türleri eklemek veya mevcut olanları değiştirmek istiyorsanız, buradan başlarsınız.
Kurulumu Yapın (Eğer Denemek İstiyorsanız)
Tek oyunculu sürüm doğrudan ileri. Deposu klonlarsınız, sonra herhangi bir modern tarayıcıda singleplayer.html'yi açarsınız. Derleme adımı yok, node_modules kabusu yok. Bitti.
Çok oyunculu için Node.js yüklü olmanız gerekir (proje eski sürümleri hedefler, ancak herhangi bir son LTS işe yaramalı). npm ile bağımlılıkları yükleyin, sonra sunucuyu başlatın:
npm install
node server.jsSunucu çalıştığında tarayıcınızda multiplayer.html'yi açın ve bağlanacaktır. Daha sonra çok oyunculu'yu test etmek için aynı sunucuda birden fazla tarayıcı penceresi açabilir veya bağlantı URL'sini yerel ağınızdaki diğerleriyle paylaşabilirsiniz. İnternet üzerinden uzak oyun biraz ağ kurulumu gerektirir (port yönlendirmesi veya ngrok), bu proje belgelerinin ötesinde ancak kesinlikle mümkündür.
Bir şey kırılırsa veya vanilla Minecraft'a geri dönmek istiyorsanız, tarayıcı sekmesini kapatın. WebCraft tamamen bellekte ve tarayıcı WebGL bağlamında çalışır, bu nedenle hiçbir şey kalıcı değil veya sisteminizi değiştirmez. Temizlenecek sıfır izleme.
Onu Ayırt Eden Şey
Sıfırdan voxel renderer oluşturmak önemsiz değildir. Bunu grafik kitaplığı olmadan yapması vurgudur. WebGL yeterince düşük seviye ki, parça geometrisinin nasıl oluşturulduğunu, yüzlerin nasıl budandığını (gizliyse çizilmeyen) ve ışık hesaplamalarının nasıl çalıştığını tam olarak görsünüz.

Çok oyunculu kurulumu yalındır. Socket.io çift yönlü iletişimin zor parçalarını ele alır, ancak yine de oyun durumunun nasıl seri hale getirildiğini, tel üzerinden nasıl gönderildiğini ve istemci tarafında nasıl uzlaştırıldığını görürsünüz. Bu, çoğu oyun eğitiminin atladığı gerçek bir ağ problemidir.
Takdir ettiğim başka bir ayrıntı: proje kendisini özelliklerle şişirmez. Blok yerleştirme, dünyayı render etme ve oyuncuları senkronize etmenin temel döngüsüne odaklanır. GUI framework'ü yok, animasyon kitaplığı yok, paket şişkinliği yok. Birisinin pragmatik uygulama kararlarını okuyorsunuz, bir framework vitrin değil.
Bilmeniz Gereken Sınırlamalar
Performans büyük bir faktördür. Donanımınıza ve tarayıcıya bağlı olarak, çok büyük yapılar inşa ederseniz veya muazzam dünyalar oluşturursanız bir miktar takılma yaşayabilirsiniz. Binlerce küpü render etmek yapılabilir, ancak sonsuz ölçeklenebilir değil. Modern makinelerde daha küçük oyun alanlarıyla sorunsuz çalışmasını ve bunu genişlettikçe biraz takılma yaşamasını bekleyin.
İçinde yerleşik kalıcılık yoktur. Sayfayı yenileyin veya sunucuyu yeniden başlatın, dünyaya veda edin. Kalıcı dünyalar istiyorsanız kendiniz veritabanı mantığı eklemeniz gerekir. Aynısı sunucu yapılandırması, yönetici araçları veya kullanıcı kimlik doğrulaması için geçerlidir. Bu bir iskelet, eksiksiz bir sunucu ürünü değildir.
Classic mod kısıtlaması hayatta kalma öğeleri yok anlamına gelir - canavar yapay zekası yok, dungeon yok, hazine yok. Bunu modern Minecraft ile karşılaştırırsanız, çekirdek yapı mekaniği dışında neredeyse her şeyi kaçırıyor. Bu bir eksiklik değil, proje belirlediği ve bağlı kaldığı gerçekçi bir kapsam sınırıdır.
Ayrıca tarayıcı uyumluluğu: bu WebGL çağında yapıldı, bu yüzden çok eski tarayıcılar işe yaramaz. Geçen on yıldaki herhangi bir şey iyiyse, ancak Internet Explorer veya eski Android cihazlarda çalışmasını beklemeyin.
Benzer Projeler İstiyorsanız
Bilmeniz gereken birkaç alternatif vardır. Minecraft'ın kendisi web sitesinde Minecraft Classic olarak adlandırılan ücretsiz bir sürüm sunuyor eğer sadece resmi deneyim istiyorsanız. Bu web tabanlı da, resmi olarak bakım yapılıyor, ve çok daha cilalı hissediyor.
Spesifik olarak voxel oyun geliştirmeyi öğrenmeyle ilgileniyorsanız, daha temiz başlangıç projeleri vardır. Bazıları Voxel.js'yi veya farklı bir dil tercih ederseniz Python kütüphanesi Panda3D'yi öneriyorlar. Bunlar daha aktif topluluklar ve güncel belgeleme eğilimindedir.
Minecraft modları ve araçları için, topluluk listeleri test edilmiş sunucuları ve kaplamaları tutup, vanilla Minecraft'ı genişletmeyle ilgileniyorsanız bu işe yarar. Votifier Tester ve Text Generator araçları JavaScript'e girmeden sunucuları yönetmenize ve özel içerik oluşturmanıza yardımcı olabilir.
Benim Görüşüm
WebCraft çok spesifik bir ihtiyacı karşılar. Blok tabanlı bir oyunun gerçekte nasıl çalıştığını anlamak istiyorsanız veya web grafikleri ve oyun döngüleri öğreniyorsanız, birkaç saatlik inceleme değerdir. Kod okunabilir, mimarı sağlam ve başladığınız şeyden çok daha fazlasını öğreneceksiniz.
Rasgele oyun için? Resmi Minecraft'a yapışın. Öğrenme için? Bu güzeldir. Artık bakım görmediği gerçeği eğitim amaçları için önemli değildir. Kod hiçbir yere gitmiyor ve orada bulunan şey iyi düşünülmüş.
Yetenekli bir geliştirici tarafından hiçbir framework olmadan ilginç bir şey oluşturabileceğini kanıtlayan projelerden biridir. Sadece yetenek, açık düşünce ve sorunun katı bir anlayışı. Yalnız onu bildiğine değer.
Overv/WebCraft - Zlib, ⭐418Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.


