Dünyayı hareket ettirmeli miyim yoksa oyuncuyu hareket ettirmeli miyim?


11

Oyuncunun amacının dokunmadan önce yatay eksende olabildiğince seyahat etmek olduğu bir yandan kaydırma oyunu geliştirmeye başlamak üzereyim. Yatay eksende hiç geri gitmeme gerek olmadığını unutmayın.

Bunu OpenGL ve Box2d kullanan Android için AndEngine ile geliştiriyorum.

Başlamadan önce önemli bir şeye karar vermeliyim: hareketi simüle etmek için oyuncunun etrafındaki dünyayı kullanmalı mıyım yoksa oyuncuyu hareket ettirmeli ve onu oyun motorunun kamera özellikleriyle takip etmeli miyim?

Her iki yaklaşımın da farklı güçlü yönleri ve geri dönüşleri var gibi gözüküyor, bu yüzden hangisinin en iyi kabul edildiğini bilmiyorum. Örneğin, yol boyunca güç ups eklemeyi ve güzel bir animasyon arka plana sahip olmayı ne kolaylaştırabilir?

Teşekkürler!


2
Kamerayı hareket ettirin.
Jonathan Dickinson

1
Kamerayı kullanmak istememek için özel bir nedeniniz yoksa (zaten sizin için yazılmıştır), oynatıcıyı ve kamerayı hareket ettirmelisiniz. "Güçlendirmeler" i eklemek her iki şekilde de etkilenmemelidir.
Christopher Horenstein

Yanıtlar:


9

Kamerayı hareket ettirin (oynatıcınıza takılı). Dünyanızın düşman gibi birden fazla nesnesi olduğunu hayal ediyorum. Dünyayı hareket ettirmeye devam ettiyseniz, dünyanın her hareketinde konumlarını güncellemek için tüm bu nesneler arasında dolaşmanız gerekir.

Oynatıcıyı hareket ettirir ve kamerayı oynatıcıya bağlarsanız, minimum kaynak kullanımı olur. Oyun render aşamasına geçecek, her karede olduğu gibi her şeyi gözden geçirecek ve onları pozisyonda çizecek - kamera. Konum. Bu durumda kamera konumu her zaman oyuncularınızın konumuna eşit olacaktır.


Tabii ki nesneler düşmansa, bunlar arasında dolaşmak zorunda kalmazsınız, sadece dünya hareketlerini güncelleme yöntemlerine ekleyin.
SirYakalot

1
+1. camera.setChaseEntity(player);Bunu başarmak için kullanın .
MartinTeeVarga

6

Her zaman kamerayı hareket ettiriyorum ve tavsiye ederim - bunu tercih etmemin birçok nedeni var, ancak en önemlisi muhtemelen buna bağlı:

  1. Kamerayı ve oynatıcıyı hareket ettirirseniz , ekranı kaydırmak için güncellenmesi gereken yalnızca iki varlıktır .

  2. Ekranın her kaydırılması gerektiğinde tüm dünyayı hareket ettirirseniz, bu, güncellenmesi gereken bilinmeyen ve muhtemelen çok sayıda varlığı kapsar .


Katılıyorum, ancak düşman sınıfına dünya hareketini + = 'eklemenin oldukça önemsiz olacağını da ekleyeceğim.
SirYakalot

@AsherEinhorn Her düğümün ebeveynin dönüşümlerini paylaştığı ve sadece kök düğümü (yani "dünya") hareket ettirdiği sahne grafiği gibi bir senaryodan bahsettiğinizi varsayalım? Çünkü diğer her durumda, dünyayı hareket ettirmek, dünyadaki her şeyi hareket ettirmek anlamına geliyor - ki bu da benim görevimin noktasıydı.
David Gouveia

eğer dünyanın hareketi oyuncu ile ters orantılı ise. yani - ilerlersiniz, dünya geri gider, o zaman sadece - = oyuncular tüm oyun nesnelerine hareket eder. Sana katılıyorum, sadece ikisinin de işe yaraması için önemsiz yollar olduğunu söylüyorum.
SirYakalot

4

Gerçekten çok önemsiz, tarif ettiğiniz şeylerden gerçekten bir fark yaratmıyor.

Arka planı kameranın ve oynatıcının yanına taşırsınız veya oynatıcıyı ve kamerayı onunla birlikte taşırsınız. Arka planı hareket ettirirseniz yapılacak daha az şey var sanırım.

Her ne kadar arka planı hareket ettirirseniz, yine de önemsiz olan ancak herhangi bir pikap ve düşmana ebeveynlik yapmanız gerekecek.

Şahsen oyuncuyu hareket ettirirdim çünkü işlerin daha gerçekçi bir şekilde yapılmasını seviyorum.


0

Diğer cevaplar iyidir, ancak farklı bir proje için aynı kararı vermeye çalışan birine yardım etmeyi umarak neyin daha iyi olduğuna dair birkaç nokta eklemek istiyorum.

Oynatıcıyı Taşıma:

  • Çok basit, diğer her şey statik (ish), bu yüzden basit terimlerle, oynatıcıyı hareket ettirmek için yapmanız gereken tek şey player.x += 5;(sözde kod).
  • Çoğu insan için "daha iyi tıklar". Bir oyun oynarken, oyuncunun hareket ettiğini düşünürsünüz, tersi değil. Bu yüzden bunu "Oyuncu dünya değil, hareket etmeli" olarak düşünmek daha kolaydır, bu da birinin kafasında organize etmesini kolaylaştırabilir.
  • Oyuncunun nerede olduğunu takip etmek kolay (konumu aynı zamanda haritadaki koordinatlarıdır)

Dünyayı Hareket Ettirmek:

  • Oyununuz yeterince büyükse, oyuncunun pozisyonu her zaman çok yakın olduğu için, dünyanın merkezinden çok uzaklaşarak taşma / taşma konusunda endişelenmenize gerek yoktur 0.
  • Yukarıdakine benzer olarak, 3D hesaplamalar ile uğraşırsanız, kayan noktalarla yanlış sonuçlar hakkında endişelenmenize gerek yoktur, çünkü ekranda gördüğünüz her şey oldukça yakın olmalıdır 0.
  • Doğru yapılırsa, "sonsuz" bir dünya yapabilirsiniz.
  • Oynatıcıyı manuel olarak izlemeniz gerekir, oyuncunun konumu her zaman, oyuncunun ekranın sol üst köşesinde mi yoksa sağ alt köşesinde mi olduğunu bilmek için oyuncunun ekranın neresinde olduğunu (küçük bir değer) gösterir, bunu bir şekilde takip etmeniz gerekir.

Günün sonunda, projeye bağlı. Birisi orijinal bir Mario klonu yapıyorsa, oyuncuyu hareket ettirmek çok fazla sorun yaratmazken dünyayı hareket ettirmek karmaşık olabilir. Yine de büyük bir açık dünya oyunu yapmak istiyorsanız, dünyayı hareket ettirmek daha iyi olabilir.

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.