Bir bilgisayar oyunu sonsuz bir döngüdür:
- Güncelleme: Oyun durumunu bir küçük zaman diliminde ilerletin (1/80 saniye gibi).
- Mevcut oyun durumunu boya.
Bunların varyasyonları var. Bazı oyunların her boya arasında daha fazla güncellemesi vardır veya farklı makinelerde oyun akışını eşit derecede pürüzsüz hale getirmek için bunları değiştirebilir. Ama bu teknik detaylar.
Saniyede 50 ila 100 kez gerçekleşen güncelleme aşaması (evet, sık sık):
- Oyun fiziğini güncelleyin. Diyelim ki bir aktörün hızı var. Güncelleme onu biraz doğru yönde hareket ettirmelidir. Ayrıca, bir fizik motoru kullanırsanız, diğer aktos veya engellerle çarpışmaları kontrol etmelidir.
- Oyun kurallarını güncelleyin. Bir fizik deneyi değil, bir oyun yapan budur. Bir oyuncunun oyuncu aktörüne çarptığını söyleyin. Oyun kuralları oyuncuya X sağlık puanını ve mermiyi korkutmak için çıkarmasını söyler.
- AI güncellemeleri. Bazen bilgisayar kontrollü aktörler ne yapılacağına karar vermelidir. Sola mı yoksa sağa mı gidiyorsunuz? Olmak için güzel bir yere bir yol bulun. Bir silahı ateşle.
- Giriş kontrolü. Oyuncu aktörünü klavyede basılan düğmelere göre güncelleyin.
- Sahne grafiğini güncelleyin. Bu, bir adımı bir adım ilerletebilir veya oynatıcının artık 10 puan daha az cana sahip olduğunu göstermek için GUI'yi güncelleyebilir. Tek amacı oyunun güzel görünmesini sağlamaktır.
Nereden başlıyorsunuz?
Bir grafik oyunun temel şartı grafik programlamaktır. Bir pencere açabildiğinizden emin olun ve içine bir top çizin.
Sanırım bir çeşit ders yapabilirsiniz. Bir Ball sınıfı yapın. Şu üyelere sahiptir: x, y, deltaX, deltaY. Hepsi tamsayılar ve piksel ölçekleridir. Şimdi, bu döngüyü yazın.
forever, do this {
start measure time (in milliseconds)
//physics part
add deltaX to x
add deltaY to y
if x is bigger than the screen width, assign -deltaX to deltaX
if y is bigger than the screen height, assign -deltaY to deltaY
if x is less than 0, assign -deltaX to deltaX
if y is less than 0, assign -deltaY to deltaY
//paint
paint the ball at x, y
stop measuring time, assign this to workTime
make the thread sleep for (25 - workTime) milliseconds
}
Bu, pencerenin sınırlarının top zıplamasını sağlayacaktır. Henüz bir oyun değil, fiziksel bir simülasyon. Toplar fizik güncellemesini top sınıfının içine yazarsanız, birkaç top eklemek kolaydır. Bunları bir listede saklayın ve her kare için her birini güncelleyin ve boyayın.
Bir raket (bunun için fiziği simüle edebilir ve fare veya klavye ile kontrol edilebilir hale getirebilirsiniz) ve topun sol duvara ulaşmasını durdurmak gibi bir oyun hedefi ekleyebilirsiniz. Oyun zamanla daha fazla top eklerse zorluk artacaktır. Bir oyunun var.
Neden (25 - workTime) milisaniye uyuyorsunuz? Bunu böyle yaparsanız, simülasyon saniyede 40 güncelleme ve boyayla uyumlu bir hızda çalışır. Oldukça pürüzsüz olacak. Uyku bölümünü atlarsanız, animasyon sarsıntılı olur ve% 100 CPU alır. Ayrıca, topun hızı, onu çalıştıran makinenin hızına bağlı olacaktır. Şimdi, topun dikey hızı saniyede 40 * deltaY pikseldir.