2d yukarıdan aşağıya harita: normalleştirme ya da değil?


11

Ben oyun programlama ile mutlak bir acemiyim, eğer bu soru zayıf bir şekilde formüle edilirse, yanımda özensizlik değil, oyun programlama deneyimi eksikliği olduğunu unutmayın.

Kodlamayı planladığım oyun, yukarıdan aşağıya 2D haritayı "dünya" olarak kullanacak. Dünya pencereden daha büyük olabilir (pencere yakınlaşıp uzaklaşabilir) ve araçlar dünyanın herhangi bir noktasına yerleştirilebilir (= kiremitli bir harita değil, alan "sürekli").

Bir örnekle açıklığa kavuşturmak için: dünya 1000x1000 metrelik bir arazi ise, bir araç (327.31, 720.4) metrede olabilir.

Sorum şu: dünyayı kendi içinde temsil etmenin en uygun yolu nedir? Bu olasılıkları düşünebilirdim:

  • hiçbir şey yapmıyorum ve sayaçları fiziksel nesneyle çalışıyormuşum gibi kullanıyorum ,
  • dünya boyutunu maksimum zumda 1000 metreyi temsil eden piksel sayısı olarak tanımlayan piksellere normalleştirin ,
  • 1 büyüklüğünde kare olarak sözcüğü tanımlayan 1 normalleştir

... ama eminim başkaları da olabilirdi / bazılarım anlamsızdı. Bu sadece benim ilk oyunum olarak, önümdeki sorunların net bir resmine sahip değilim ve makul bir şekilde doğru bir başlangıç ​​seçimi yapmak için bazı rehberlik istiyorum.

Zaman ayırdığınız için teşekkür ederim.


Bu sorunu yaşadım. Cevap olarak yayınlamayacağım - orada zaten harika şeyler var. Ancak, rasgele bir birimde çalışıyorsanız, tek bir değeri değiştirerek herhangi bir çözünürlüğü destekleyebilirsiniz. Oynanış açısından başa çıkmak çok daha kolay. Son olarak, piksel ölçümleri gibi büyük sayılarla, fizik sims patlayabilir.
Komünist Ördek

Yanıtlar:


10

Mesafenin temeli olarak gerçek dünya değeri (metre, fit vb.) Kullanmayı kabul ediyorum. Diğer iki önerinizle ilgili sorun, her ikisinin de değişken olmasıdır. Dünya boyutunda çalışmak, 1tüm aritmetik işlemlerinizin -1 ile 1 arasında kayan nokta olmasına neden olur ve bu da daha fazla kayan nokta hatasına yol açabilir. Ayrıca, değişken dünya boyutlarını (daha uzun oyunlar için "Büyük" dünyalar, vb.) Yapmaya karar verirseniz, kodunuza birçok sorun getireceksiniz. Benzer şekilde, maksimum / minimum yakınlaştırma düzeyinde bile pikseller kullanırsanız, yakınlaştırma düzeylerini artırmaya veya azaltmaya karar vermeniz gerektiğinde karışıklık ve sorun yaşarsınız.


Bu cevap mükemmel (+1). Özellikle dünyanın büyüklüğü için "1" kullanımıyla ilgili olası sorunları nasıl açıkladığınızı seviyorum.
Randolf Richardson

Herhangi bir fiziksel simülasyon yapıyorsanız, tamamen oluşturulmuş olsa bile, sabit nokta tamsayıları kullanmak geçersiz sonuçlara neden olur. Tek yapmanız gereken, köşegen üzerinde birim hızda hareket eden tek bir aracı modellemek ve konumunu doğru bir şekilde temsil etmenin hiçbir yolu olmadığını göreceksiniz.
edA-qa mort-ora-y

3
Anlaşılan RE: sayaçları kullanarak. Aynı zamanda zihinsel olarak şeyleri görselleştirmenize ve anlamanıza yardımcı olacaktır. "Bu araç 5 metre uzunluğunda" veya "Bu iki nesne 500 metre arayla" ve yaptığınız şey hakkında bir fikir edinmek için her zaman zihinsel matematik yapmak zorunda değilsiniz.
Tim Holt

Tam sayı aritmetiğinin kayan noktadan daha hızlı olduğu ifadesi genel olarak doğru değildir, aslında çoğu modern platformda çok daha hızlıdır
Maik Semder

2
Hala mutlak pozisyonlar için sabit nokta değerleri kullanmak iyi bir fikir olabilir. Bu, tüm dünyada sürekli hassasiyet ve özdeş fizik sağlar.
CodesInChaos

7

Önerdiğiniz üç seçenekten, sayaçları kullanmak muhtemelen en iyisi olacaktır. Başka veriler oluştururken, metre cinsinden uzunluk ile uğraşmak hayatınızı çok daha kolay hale getirecektir. Diğer nedenlerin yanı sıra, dünya boyutunuzu değiştirmeye karar verebilirsiniz veya farklı seviyeler farklı boyutlu haritalara ihtiyaç duyabilir.

Ayrıca ayak (veya muhtemelen inç) kullanmaya da karar verebilirsiniz. Bu kararın bir kısmı hangi ara katman yazılım paketlerini kullandığınıza bağlı olabilir - bazı fizik motorları bir birim tipini veya diğerini tercih eder (neredeyse her zaman yapılandırılabilir). Çoğunlukla, sadece bir birim seçip onunla gidebilirsiniz.


5

'1' normalleştirmek gerçekten gitmek için bir yol değildir (ya kare olmayan bir dünyanız varsa? Ya da farklı büyüklükte birkaç dünya ...).

Pikselleri kullanarak ... ASLA oyun ve grafik önlemleri karıştırmayın !! Kendinizi kilitlemeyin, böylece kodu değiştirmek zorunda kalmadan grafikleri değiştiremezsiniz.

Yani metreler (ayaklar ya da en çok sevdiğiniz ölçümler) gitmenin yoludur. Füze fırlatıcınızı 50 km / s hızda 0.00076 birim / saniye hızda hareket edecek şekilde kodlamak çok daha iyi hissedeceksiniz ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.