2011-04-05 24 views
8

Bu yüzden Java'da bir oyun yazmaya başladım ve oyun nesnelerini yazıyorum. Şimdi burada Evolve Your Hierarchy'da okudum, oyunlarınızı büyük bir sınıf hiyerarşisi olarak değil, besteler olarak oluşturmalısınız. Bir önceki bağlantısından bu görüntüde gibi: aslında uygulanmasına aşağı alırkenJava'da katı Saf Toplama (kompozisyon) Oyun Nesneleri nasıl yazılır?

enter image description here

Ancak, ben arabirimleri uygulanacağı yeri yaklaşık bir küçük sorum var.

Player adında bir sınıfınız ve hareketli ve yenileyebilir arabirimleriniz olduğunu varsayalım.

class Player { 
    public Moveable moveable; 
    public Renderable renderable; 
} 

class GenericMoveable implements Moveable { 
    // Function implementations 
} 

class PlayerRenderable implements Renderable { 
    // Function implementations 
} 

Yoksa denemek ve nesneye doğrudan arayüzleri uygulayarak bu yaparsınız:: Bu kullanarak kamu arayüz değişkenleri uygulamak musunuz şu anda ben ikinci yöntem daha iyi olduğunu hissediyorum Şimdi

class Player implements Moveable, Renderable { 
    private GenericMoveable genericMoveable; 

    // Non-direct Implementation of Moveable 
    void someMoveFunc(double x, double y) { 
     genericMoveable.someMoveFunc(x, y); 
    } 

    // Direct implementation of Renderable 
    void someRenderableFunction() { 
     // Player class specific code 
    } 
} 

class GenericMoveable implements Moveable { 
    // Function implementations 
} 

.

List<Renderable> renderObjects; // use this to draw all of the objects to the screen 
List<Moveable> moveObjects; // use this to move all objects at once 

Gerçekten sadece doğru yolda olduğumu onay almak istiyorum: Ben şu listeleri oluşturabilir, çünkü bunun için ana nedenidir. Java'daki oyunlar için oyun nesnelerine göre oyun nesneleri oluştururken, söz konusu arabirimleri doğrudan söz konusu Oyun Nesnesine uygulamak ve sonra ihtiyaç duyduğunuzda özel arabirimler kullanmak ve diğer işlevler için bu işlevlerin doğrudan uygulanmasını istediğinizden eminim. Bu doğru mu? Ve yaptığım şeyin olumlu ve olumsuz yönleri neler?

Biz buradayken, Java'daki Kompozisyonel Oyun Nesnelerinin uygulanmasında başka nelere dikkat etmem gerekiyor? Ne farklı yapmalıyım? Önceden herhangi bir cevap için teşekkürler, her türlü yardım için teşekkür ederim.

+0

ikinci örnek çok daha güzel görünüyor Hareketli ve Yenilenebilir arayüzler.Ama hareket edebilen bir dizi sınıfım var ve ben genericMoveable.someMoveFunc (x, y) kopyasını buluyorum. ; hepsinde - bu soruna girdiniz mi? – sdasdadas

+0

@sdasdadas Aslında şuna bir göz atmanızı öneriyorum: http://gamadu.com/artemis/ –

cevap

2

Bu ilginç bir bağlantıdır. Player sınıfınız için göz önünde bulundurduğunuz şeyin, bu makalenin bileşen kabı olarak adlandırdığı şey olduğunu düşünüyorum. Bunun için sınıftaki arayüzlerin uygulanması bana giden yol gibi geliyor. Artık sisteminizde bir Player sınıf başına olduğu yerde (saf toplama yapısına götürecektir tek yolu. Bu arada

, Sizin teklif yapı temelde bir uygulamadır delegation design pattern. bir Player tüm hareket işlemleri bir Movement nesneye delege dayanır ve buna çalışmak zorundadır Movement nesnenin belirli ne tür umursamıyor. Eğer listelerini yapabiliyorsanız çünkü

+0

Düşüncelerimi daha iyi açıklayabilmem için belleğe daha fazla tasarım modeli yapmalıyım. “Sizi saf bir toplama yapısına götürecek tek yol budur.” Yani bu, yapının şu anda saf bir kümelenmeyle kast edilen şeyin olmadığı anlamına mı geliyor? –

+0

Bu bağlantıdan ne anladığımdan değil. O yazıyor, "... her oyun varlığı bir bileşen koleksiyonundan oluşur. Böyle bir 'oyun varlığı nesnesi' yoktur." Onu tam olarak anlatayım: Saf bir toplama mimarisinde hiçbir “Oyuncu” sınıfı olmayacaktı. Oldukça aşırı bir refakatçiydi ve yazdığı şeyden, yolculuğun onun için tam olarak acısız olmadığının izlenimini aldım. Partiye gitmek (yaptığınız gibi) bana göre daha makul görünüyor. –

4

Java kullanarak birkaç oyun oluşturdum ve birkaç çok iyi oyuna da kaynak gördüm ve bunu yapmanın en yaygın yolu ikinci yöntemle. Anlatabildiğim kadarıyla, ikinci yöntemi kullanmanın en iyi nedeni, Listelerinizi kullanarak nesnelerinizi takip etmenin daha kolay hale gelmesi ve daha az çizgi kullanarak çizim yapabilmenizdir. Görünüşe göre doğru yoldasınız ve Hiyerarşi Evrimi makaleniz yeni oyun geliştiricileri için harika bir okuma.

+2

Eğer vahşi olarak gördüyseniz, o zaman bu yolun en azından başkaları için yeterince iyi çalıştığı konusunda bana daha fazla güven verir. kullanın. –