2010-10-20 19 views
5

Profesörüm, bugün Pygame'de nesne tabanlı programlamaya göre sınıfıma bir ödev verdi. Temel olarak, yaratacağımız oyunun ana oyun döngüsünün geçersiz kalacağını söyledi. Bunu yapmanın mümkün olduğuna inanıyorum ve (this question bunun mümkün olduğunu belirtti) Bunun, Nesneye Yönelik paradigmaya bağlılık için gerekli olduğuna inanmıyorum.Ana döngü olmadan oyun programlama

Profesörün verdiği bir şemada, oyunun başlatıldığını ve nesnelerin başlatıldığını göstererek programın kontrol akışının nesneler arasında dağıtılacağını gösterdi. Temel olarak, bu şekilde bir oyunun uygulanmasının mümkün olabileceğine inanıyorum, ama ideal bir yol değil, Nesneye Dayalı bağlılık için gerekli değildir. Düşüncesi olan var mı?

DÜZENLEME: Gerçek zamanlı aksiyon oyunu olması nedeniyle işleri daha da karmaşık hale getirdiğine inandığım bir asteroid klonu yaratıyoruz.

+0

Hm, bunun nasıl işe yarayacağını görürsem, çok fazla ve çok sayıda asteroit olduğunda nasıl iyi performans göstereceğini göremiyorum. Çarpışmayı kontrol etmek için hangisi? Her biri kendi başına mı? O zaman gereksiz çarpışma kontrollerinden kaçınmak için hangisi quadtree'yi güncelleyecektir? Varlıkların bir tür küresel devleti manipüle etmesi, IMO'nun en iyi tasarım tercihi değildir. –

cevap

7

Başa dön tabanlı oyunlar veya olaylara bağlı bir şey gitmek için gidilecek yoldur. Başka bir deyişle, masaüstü GUI uygulamalarını alın. Bir olay tetiklenene kadar sadece bekleyin (bekle). Aynı şey basit bir oyun için de yapılabilirdi. Mesela damaları al. Her oyun döngüsünün döngüleri aşırı olacaktı. Oyunun% 90'ı oyunda statik olacak. Bazı olay formlarını kullanarak (observer design desen burada güzel olurdu) çok daha iyi bir çözüm sağlayacaktır. Pygame kullanıyorsunuz, bu yüzden yerleşik olarak benim için destek olabilir, sınırlı kullanımım nedeniyle tamamen yorum yapamıyorum. Her iki durumda da, genel ilkeler aynıdır. Bana sorarsan, her şey güzel bir çöplük görevidir. Size olay odaklı programlama öğretmek için, basit bir GUI uygulaması daha iyi olurdu. En basit oyunları bile bize OO prensiplerine uygun temel bir oyun döngüsü.

+0

Teşekkürler, temelde düşündüğüm şey buydu. Gözlemci tasarım fikri için teşekkürler, kullanacağım. – emberv3

+0

@ emberv3'e hoşgeldiniz. – Finglas

0

Olay odaklı programlama olarak nitelendirilebilir miyim? Hala nesne odaklı olabilir. Bunu Flash'ta çok görüyorsunuz.

Ana sınıftaki ana döngü arasında fark var. Hala bir oyun sınıfının tüm nesnelerinizi başlatabilir ve daha sonra oyunu ileriye taşımak için girdilere güvenebilirsiniz.

Ödevinizin kesin parametrelerini bilmeden tam olarak söylemek zor, şeytan ayrıntılarda.

2

Hmm. Genel durumda, bu fikrin muhtemelen hokum olduğunu düşünüyorum. SDL (hangi PyGame uygulandıysa), bir olay kuyruğu aracılığıyla programa bilgi sağlar ve bu kuyruğu tüketmek, olayların sıraya konmasını, işlenmesini ve bir sonraki olaya kadar beklemesini gerektirir.

Bununla ilgili bazı özel istisnalar vardır. Fare ve klavyeyi, durum sıralarına erişmeden durumları için yoklayabilirsiniz. Bununla ilgili sorun hala bir döngü gibi bir şey gerektirmesidir, böylece oyun çıkana kadar tekrar tekrar gerçekleşir.

Olay kuyruğunda beklemek yerine bir zamanlayıcıda beklemek için pygame.time'u kullanabilir ve ardından denetimi yukarıdaki gibi fare ve klavyeyi yoklayan oyun nesnelerine geçirebilirsiniz, ancak yine de "döngü" yorsunuz, ancak Etkinlik kuyruğu yerine bir zamanlayıcı.

Bir ana döngüyü yok etmeye odaklanmak yerine, onu nesne yönelimli bir şekilde kullanmayı düşünün.Örneğin, kendi olay döngüsüne sahip olan bir 'root' nesnesine gereksiniminiz olabilir, ancak gelen olayları temel alan herhangi bir eylem gerçekleştirmek yerine, çeşitli alt nesneler üzerinde bir işleyiciyi çağırır. Örneğin, kök nesnesi bir pygame.event.MOUSEBUTTONDOWN olayını aldığında, bir 'rect' özniteliği için alt öğelerini arayabilir ve event.pos özniteliğinin bu rect içinde olup olmadığını belirleyebilir. eğer bu çocuk nesnesinde varsayımsal bir onClick yöntemini çağırabilir.

İlgili konular