Sonsuz çimenlik, karlı ve endüstriyel savaş alanlarında ya da 35 klasik haritada kartalı savun. On ikmal malzemesi topla ve yok etmek için dört isabet gereken ağır düşman tanklarını alt et.
Üreticinin herkese açık projesine dayanan bir başlangıç açıklamasıdır; özgün istemin birebir kopyası değildir. Sonucun farklı olabilir.
670383f86f56c61e29e10d12424addf6f8defbe9 çalışma zamanı commit'inde yerel olarak yazılmış Three.js projesinden türetilen ve herkese açık oynanışla doğrulanan yeniden oluşturma spesifikasyonu. Battle City'ye (1985, Namco) bağımsız bir hayran projesi. Klasik harita/dalga verileri: gunnerson/battlecity (MIT); toplanmış sesler: JustoSenka/BattleCity (MIT repository). Tripo P2 ile 17 model üretildi. Bu, projeden türetilmiş bir spesifikasyondur; orijinal üretim isteminin birebir kopyası değildir.
Battle City3B tank oyunuThree.jsTripotank savunmasıprosedürel haritalar
İstem
1. Proje hedefi
1985 tarihli Famicom klasiğinden ilham alan, tarayıcıda çalışan bir tank savunma oyunu olan Battle City 3D'yi geliştirin. Oyuncu bir tankı sürer, 20 düşmandan oluşan bir dalgayı yok eder, malzeme toplar ve kartal karargâhını korur. Referans medyada gösterilen mevcut perspektifli 3B sürümü; tohum tabanlı sonsuz bir harekât ve seçilebilir 35 klasik düzen dâhil olmak üzere yeniden oluşturun. Okunabilir arcade kurallarını korurken tanklara, duvarlara ve çevreye gerçek bir derinlik kazandırın.
2. Görsel stil
60 derecelik görüş alanına sahip bir Three.js PerspectiveCamera kullanın. Varsayılan savaş alanı görünümü oyuncunun arkasında ve üstünde, yaklaşık 13 dünya birimi uzaklıkta ve 0,43 radyan yükseklikte konumlansın. Tankın konumunu ve önündeki bir noktayı yumuşak biçimde takip edin; tank döndüğünde kamerayı otomatik olarak döndürmeyin. Daha yüksek bir taktik görünüm, manuel sürüklemeyle yörünge kontrolü ve tekerlekle yakınlaştırma sunun. Hareket ve ateş için dört ana harita eksenini kullanın. Yörüngede döndürme sonrasında yön tuşlarını kameraya göre en yakın ana yöne eşleyin; klavye girdisini hiçbir zaman çapraz harekete dönüştürmeyin. Kasanın yönünü atış yönüyle hemen eşleştirin; mermi ve namlu alevi yüksekliğini her modelin gerçek topuna göre ayarlayın.
Yere oturan paletli tanklar, metalik taretler, pişmiş toprak tuğlalar, koyu çelik bloklar, mavi su, alçak bitki örtüsü ve yansıtıcı buz kullanın. Oynanabilir alanın dışındaki zemini ağaçlara, harap binalara ve sise doğru devam ettirin. Sıcak yönlü ışık, yumuşak gölgeler, ortam dolgusu, ACES ton eşleme ve ölçülü namlu alevleri, geri tepme, kıvılcım ve seken enkaz kullanın. Kar, zemin ve ağaç paletini değiştirsin; endüstriyel bölümlerde çelik ve harap binalar öne çıksın.
Oyunu koyu zeytin tonlarında bir komuta arayüzü, sıcak sarı ana eylem rengi, skor, ortak canlar, kalan düşman simgeleri, bölüm adı ve radar ile çerçeveleyin. Büyük Tripo 3D / Three.js model seçimini savaş alanının üstüne yerleştirin; seçili modu ve dönen tank önizlemesini gösterin. Yerelleştirilmiş, resimli bir malzeme rehberi ve süreli etki göstergeleri kullanın. Dar ekranlarda oyun alanını ve temel dokunmatik kontrolleri görünür tutun.
3. Dünya ve sahneler
Savaş alanını 26'ya 26 karodan oluşan bir ızgara olarak temsil edin; tank çarpışması için yarı genişliği 0,72 olsun. Kartalı (13,25) konumuna, yok edilebilir U biçimli bir tuğla savunmasıyla çevrili şekilde yerleştirin. Oyuncu doğma noktaları (9,25) ve (17,25); düşman kapıları ise (1,1), (13,1) ve (25,1) olsun.
İki harekât sunun: 20 düşmanlık dalga tablolarıyla birlikte 35 klasik düzenin tamamı ve çayır, kar ve endüstriyel biyomlar arasında döngü oluşturan, tohum tabanlı sonsuz bir üretici. Tam kasanın geçebileceği genişlikte bağlantılı koridorlar üretin; oyuncu doğma noktaları, düşman kapıları ve toplama nesnesi konumları arasında geçilebilir bağlantılar oluşturun. Doğrudan doğma noktasından kartala ateş hattını engellemek, ancak çapraz sokak erişimini korumak için merkezde kademeli çelik siperler ekleyin. Başlangıç biyomunu veya klasik bölümü seçmeye ve rastgele bir haritayı yeniden üretmeye izin verin. Harekât tohumunu, skoru, canları ve hayatta kalan oyuncuların geliştirmelerini bir sonraki bölüme aktarın.
Tuğla yok edilebilir; çelik bloklar normal mermileri ve tankları durdurur; su tankları engeller, ancak mermilerin geçmesine izin verir; bitki örtüsü düşman modellerini gizler; buz çekişi azaltır. Uzak çevreyi dekoratif tutun ve oynanış çarpışmasından ayrı tutun.
4. Varlık envanteri
Bu kararlı ve birbirinden bağımsız olarak değiştirilebilen 3B model yuvalarını kullanın. Önceliği oyuncu, düşman, ağır tank ve kartala, ardından on malzeme modelinin tamamına verin. Her varlığı en alçak noktasından zemine oturtun ve yönünü, merkezini ve ölçeğini normalize edin. Her düşman için ayrı model yüklemek yerine şablonları yeniden kullanın.
- player: Okunabilir bir tareti ve öne bakan topu olan hardal sarısı paletli tank; oyuncu tanklarında kullanılır, ikinci oyuncu için ayrı bir halka rengine sahiptir.
- enemy: Temel, hızlı ve güçlü varyantlar için farklı tonlarla yeniden kullanılan kompakt paletli düşman tankı.
- heavy: Standart düşman mesh'inden ayrı, gözle görülür biçimde daha ağır zırhlı bir tank; üzerinde görünen dört zırh segmenti bulunur.
- eagle: Karargâh kaidesi üzerinde metalik altın renkli kartal heykeli.
- pickup-star: Beş köşeli altın geliştirme yıldızı.
- pickup-helmet: Geçici koruma sağlayan askerî kask.
- pickup-clock: Düşman hareketini donduran, okunaklı bir saat.
- pickup-shovel: Karargâhı güçlendiren kürek.
- pickup-life: Bir ekstra canı temsil eden minyatür tank.
- pickup-grenade: Etkin düşmanları yok eden el bombası.
- pickup-ammo: Hızlı ateş sağlayan mühimmat sandığı.
- pickup-repair: Zırhı onaran tamir alet çantası.
- pickup-magnet: Uzaktan malzeme toplamak için at nalı mıknatısı.
- pickup-boost: Geçici hız artışı sağlayan enerji bataryası.
- environment-building: Yıpranmış, harap bir apartman binası, Tripo P2.0, istenen bütçe 1.800 üçgen.
- environment-tree: Gövdesi görünen, düzensiz bir çam ağacı, Tripo P2.0, istenen bütçe 1.100 üçgen.
- environment-bush: Alçak, yapraklı bir çalı ve çim kümeleri, Tripo P2.0, istenen bütçe 650 üçgen.
Malzemeleri renkli halkalara ve eşleşen rehber küçük resimlerine sahip, dönen ve havada süzülen toplanabilir modeller olarak gösterin. Tekrarlanan binaları, ağaçları ve çalıları ortak geometri/malzeme örnekleriyle oluşturun. Bina ve ağaç köklerini zemine oturtun; çalı tabanını araziyle birleşmesi için biraz gömün. Kar bölümlerinde yukarı bakan yüzeylere kar ekleyin. Fayans duvarlarını, suyu, buzu, mermi mesh'lerini, kullanıcı arayüzünü, ışıkları, parçacıkları ve çarpışma proxy'lerini prosedürel olarak üretin. Suyu, dünya uzayında akan dalgalar, değişen normal'ler ve küçük yüzey yer değiştirmesiyle canlandırın; bu efekt bitişik karolar arasında kesintisiz devam etsin. Tripo sürümünde 17 üretilmiş model kullanılır; karşılaştırma sürümü her iki tankı ve çevreyi aynı kurallar ve çarpışmalarla kodla oluşturulmuş geometriye geçirir. Her ikisi de Three.js ile işlenir.
5. Oynanış ve geri bildirim
Ortak üç can havuzuyla tek oyunculu ve yerel iki oyunculu eşli oyunu destekleyin. Tek oyunculu modda WASD veya ok tuşları, ateş için Space/J kullanılır. Eşli oyunda birinci oyuncu WASD ve Space/J; ikinci oyuncu ok tuşları ve Enter/Numpad 0 kullanır. P/Escape duraklatır; C kamerayı değiştirir; 1/2 model modunu seçer. Dokunmatik ekranlarda yön tuş takımına ve ateş düğmesine aynı anda basılı tutmaya izin verin, işaretçi iptal edildiğinde girdiyi bırakın; kaydırma gerektirmeden duraklatma, devam etme, sonraki bölüm ve yeniden deneme eylemlerini sunun.
Oyuncu hızı saniyede 4,2 birim, takviyeyle 6,3 birimdir. Düşmanlar temel, hızlı, güçlü ve ağır türlerden oluşur; ağır tankların dört can puanı vardır ve zırhsız alınan ilk üç darbeye dayanırlar. Bir türü yok etmek sırasıyla 100, 200, 300 veya 400 puan kazandırır; herhangi bir malzemeyi toplamak 500 puan verir. 20 düşman yok edildiğinde bölüm tamamlanır. Kartal yok edildiğinde veya hayatta kalan oyuncu kalmadan ortak canlar tükendiğinde oyun kaybedilir. Anında yeniden deneme, açıkça belirtilmiş sonraki bölüme geçiş ve yerel olarak kaydedilen en yüksek skor sunun.
On malzemenin tamamını uygulayın: yıldız üç seviyede geliştirme sağlar (daha hızlı mermiler, aynı anda iki mermi, ardından çeliği delen mermiler); kask 12 saniye kalkan sağlar; saat düşmanları 9 saniye dondurur; kürek üssü 16 saniye güçlendirir; minyatür tank bir can ekler; el bombası etkin düşmanları yok eder; mühimmat, aynı anda en fazla dört etkin mermiyle 14 saniyelik hızlı ateş sağlar; tamir iki can puanı ekler, üst sınır üçtür; mıknatıs beş birim içindeki görünür malzemeleri 20 saniye boyunca toplar; hız takviyesi 12 saniye sürer. Malzeme modelleri 25 saniye boyunca kalır ve ulaşılabilir konumlarda görünür; türleri çeşitlendirmek için karıştırılmış bir deste kullanın. Mıknatısla toplama işlemi katı engellere uymalıdır.
4,333 saniyelik bölüm açılışı, ateş etme, sürüş ve rölanti, tuğla/çelik çarpışmaları, düşman/oyuncu patlamaları, malzemenin görünmesi ve toplanması, ekstra can, zırh darbesi, buz, duraklatma ve oyun sonu için toplanmış NES tarzı örnekleri kullanın. Mevcut projede JustoSenka/BattleCity kaynağından, 3a07004ba8e53baea74ff70d2ecc22b017eb9b20 commit'ine ait 15 OGG ses işareti kullanılır. Atıflarını ve depo lisans bildirimini koruyun; bunları bit düzeyinde kusursuz donanım kaydı olduklarını iddia etmeden, toplanmış yeniden yapım sesleri olarak tanımlayın. Kullanıcı etkileşimiyle sesi etkinleştirin, örnek kazançlarını ayarlayın, ses seviyesi/sessize alma seçenekleri sunun ve sesleri olaylarla senkronize edin. Konuyla ilgisiz sürekli savaş müziği eklemeyin.
6. Teknik uygulama
TypeScript, Three.js 0.180.0 ve Vite 7 kullanın; izole bir package.json ve lockfile bulundurun. Simülasyonu işleme katmanından bağımsız tutun ve 120 Hz'de çalıştırın. Katı kasa AABB'leri, eksenleri ayrıştırılmış hareket, sınır ve tank ayrımı ve karşıt mermiler arasındaki göreli hareket çarpışması dâhil sürekli en yakın temaslı mermi taramaları kullanın. Nokta atışı duvar içinden geçişini önlemek için mermiler kasadan çıkmalı ve ileri doğru taranmalıdır. Buz hızlanması/yavaşlaması ile enkaz için sönümlü sekmeler içeren yerçekimi ekleyin. Bunlar süspansiyon simülasyonu değil, arcade tarzı zemin fiziğidir.
Aynı origin'den GLB varlıklarını GLTFLoader ile yükleyin. Çarpışma proxy'lerini varlık geometrisinden bağımsız tutun. Mevcut çalışma zamanı niceleyicili öznitelikler ve WebP dokuları kullanır (araçlar/üs için 1024 px; malzemeler ve çevre için 512 px); geometri sadeleştirme veya WASM kod çözücü kullanılmaz. Yüklemeyi dört worker ile sınırlayın; hash sürümlü URL'ler ve 20 saniye zaman aşımı olan 256 KiB aralıklar kullanın; her aralık için en fazla üç deneme yapın. Dört temel model ve ses hazır olduktan sonra oyunu açın; malzeme ve çevre varlıklarını arka planda yükleyin ve yalnızca modeli hazır olan malzeme türlerini oluşturun. Model modu değiştirilirken oynanış durumu korunur.
İngilizce, basitleştirilmiş Çince, Japonca ve Korece kullanıcı arayüzü sunun. Cihaz dilinden varsayılanı seçin; ancak zh-TW, zh-HK, zh-MO ve zh-Hant için varsayılan İngilizce olsun. Açıkça seçilen dili kalıcı olarak saklayın. Klavyeyi, masaüstü işaretçisini ve çoklu dokunmayı destekleyin; odak kaybında oyunu duraklatın. Tüm varlıkları, kredileri ve yeniden üretilebilir betikleri kaynak projesinde yerel tutun; özel kimlik bilgileri veya çalışma zamanı arka uç bağımlılığı içermeyen statik bir dist dizini dağıtın.
7. Tamamlanma ölçütleri
Düzenlenebilir kaynak kodu, varlık köken bilgilerini ve lisans bildirimlerini, npm geliştirme/derleme iş akışını ve oynanabilir bir statik önizlemeyi teslim edin. Varsayılan Tripo sahnesini, model karşılaştırmasını, tüm biyomları, dört darbe alan ağır tankı, her malzeme etkisini, duraklatma/devam etmeyi, yenilgi/yeniden denemeyi ve bölüm ilerlemesini doğrulayın. Kasa genişliği bağlantısını ve güvenli doğma noktalarını test etmek için tohumlanmış 1.000 haritanın yanı sıra tüm klasik haritaları, duvar içinden geçmeyi, çapraz atışları, tank ayrımını, buz momentumunu, birden çok yatay açı değerinde kameraya göre girdiyi ve durumu koruyan mod geçişlerini test edin. Yerelleştirilmiş kullanıcı arayüzünü ve dar ekranlarda iki parmak kontrollerini doğrulayın; yalnızca emülasyon kullanıldıysa fiziksel cihaz testi yapıldığını iddia etmeyin. Gerçek başlangıç ve savaş karelerini referans görselleri/videolarıyla karşılaştırın; 17 modelin ve 15 ses işaretinin tamamının yüklendiğini onaylayın. Mevcut CMS Web Page iş akışı üzerinden yayınlayın ve kaydedilmiş bir CMS kaydını tamamlanmış dağıtım olarak değerlendirmek yerine son herkese açık sayfayı doğrulayın.
Bu istem nasıl kullanılır?
01
Doğru araçla başla
Tercih ettiğin kodlama asistanını veya 3D aracını aç. Örnekte belirtilen modeli başlangıç noktası olarak kullan ve bağlantılı projelerin kurulum talimatlarına bak.
02
Değiştireceğin bir şey seç
Konuyu, görsel tarzı veya ortamı değiştir. Kamerayı ve etkileşimi net tanımla. Önce küçük bir sürüm oluştur, sonra ayrıntıları tek tek iyileştir.
03
Sahneye özgün öğeler ekle
Özel bir karakter veya nesne için kısa bir nesne açıklamasından ya da referans görselden 3D model oluştur ve projene aktar.
Önizlemeler ilgili üreticilere aittir. Kodu veya varlıkları yeniden kullanmadan önce özgün kaynağı ve proje lisansını kontrol et.