Oyun geliştirmenin temelleri nelerdir? [kapalı]


12

Bir video oyununun nasıl kodlanabileceğini tamamen anlamıyorum.

Ben yeni başlayan bir programcıyım ve sadece matematik ve ne yapma konsolu uygulamaları yazma deneyimi var. Bu mantıksal işlemlerin görüntüleri ekranda nasıl hareket ettirebileceğini anlamıyorum (video oyunları). Açıkçası bir oyun geliştirme kitabına ya da bunun gibi bir şeye atlarsam anlarım ama hala genel olarak programlamanın temellerini kavrayabiliyorum. Bir bilgisayar video oyunları gibi inanılmaz grafik programları üretmek için bir bilgisayar yapmak için basit matematik yapmak arasındaki atlamada herkes, basit bir açıklama, akıllıca kodlama verebilir? Belki birisinin bana işaret edebileceği bazı tanıtım videoları var?

Yanıtlar:


14

Programlamada mutlak bir başlangıç ​​olduğunuzu varsayarsak, örneğimi bildiğiniz bir şeye dayandırmak için, kullanıcının mevcut seçenek arasından seçim yapmasını istediğiniz bir menüye sahip bir konsol uygulaması yazarken önce ne yapacaksınız?

Menünüzü oluşturmayı düşündüyseniz, bir noktanız var, ancak kullanıcı mevcut seçeneğin bir parçası olmayan bir tuşa bastıktan sonra,

  1. uygulamanız çıkacak mı, yoksa
  2. kullanıcı "Çıkış" tuşuna basana kadar devam eder mi?

Bahse girerim # 2 olur, kullanıcı konsol uygulamasından çıkmak için tuşa basana kadar uygulama devam eder.

Bir şekilde oyun böyle! Oyunun ne zaman çıkmasını istiyorsunuz? Kullanıcı seçtiğinde, değil mi? Bu nedenle, eylem veya oyun menüsünün kullanıcı çıkmak isteyene kadar sürmesi gerekir. Ardından, programa çıkmak için bu tam tuşa basılana kadar devam etmesini söyleyen bir döngü oluşturmanız gerekecektir.

Game Loop ile tanıştınız. Oyun, kullanıcı tarafından açıkça çıkılana kadar çalışan başka bir programdır.

Oyun döngüsündeyken, oyunu oynarken hamleler ekranda belirli koordinatlarda çizilen görüntülerdir. Kullanıcı / oynatıcı gibi bir yön tuşuna bastığında [Left], görüntünüzün X koordinatını düşürürken koordinatlarını yenilemesini sağlayarak sol yöne doğru bir hareket izlenimi verirsiniz. Oyuncunun karakterinin / gemisinin daha sonra yapmasını istediği eylemi elde etmek için bu girdileri almalısınız. Ardından, Oyun Döngüsü, oyundan çıkılana kadar oyuncudan istenen başka bir eylem alana kadar döngü devam eder.

Korkarım bu cevap yeterince uzun olmaya başlıyor, bu yüzden sizi ilginizi çekebilecek diğer iki soruya yönlendirmeme izin verin, umarım.

  1. Oyunlar, öğreticiler veya benzerlerini yazmaya nereden başlamalı?
  2. Spritelarımı XNA'da sınıfları kullanarak taşımak .

Bu üçüncü bağlantı, oyun yazmaya nasıl başlayacağınız değil, ekranda bir hareketli grafiğin nasıl hareket ettirileceği ile ilgilidir. Grafiklerin ekranda nasıl hareket ettirileceğini de sorduğunuzdan, bunun ilginizi çekebileceğini düşündüm.

Umarım bu yardımcı olur! =)


4

Konsol uygulamaları yaparken büyük olasılıkla print () veya read () veya write () adlı işlevleri kullanırsınız. Bunların yerine, grafik oyunlar, ekrandaki tek bir pikselin rengini, çok sayıda efektle üç boyutlu modeller çizmenize izin veren tüm çerçevelere ayarlamak için set_pixel () kadar düşük seviyedeki diğer işlevleri kullanır.

Ancak ana fikir, basit bir matematik konsolu uygulamasıyla aynıdır. Kullanıcıdan girdi alırsınız, bazı değişkenleri değiştirmek için ona göre hareket edersiniz ve sonra bazı çıktıları yazdırır (veya çizer). Oyunlar ve diğer etkileşimli programlar bu girdi-hesaplama-çıktı döngülerinin her 30, 60 veya daha fazlasını gerçekleştirir. Tabii ki, her bölüm istediğiniz kadar karmaşık olabilir, ancak hepsi genellikle giriş-hesaplama-çıktıya iner. Endişelenme, doğru yoldasın.

Önerilere gelince, programlamaya devam edebildiğini söyleyebilirim. Oyun programlamaya odaklanmakla ilgileniyorsanız ve yalnızca konsol programlamayı biliyorsanız, küçük bir metin tabanlı macera veya RPG yapmayı deneyin. Bu şekilde değişkenlerinizi yönetme, rasgele sayılar kullanma ve kodunuzu düzenleme konularında çok pratik yapacaksınız.

Bununla ilgili bir deneyim edindikten sonra bir grafik kütüphanesinin temellerini öğrenin. Prosedürel programlama yapıyorsanız, OpenGL'yi öneririm, nesne yönelimli programlama yapıyorsanız XNA'yı tavsiye ederim.

Ancak, aynı anda çok fazla şey almayın. Bir kaynak ağacın nasıl yönetileceğini öğrenirken, bir dizi üzerinden nasıl yineleneceğini öğrenirken, aynı zamanda girdi ve ses almayı öğrenirken, karmaşık bir aracı öğrenme konusunda hayal kırıklığına uğramak çok kolaydır. oyununuzu tasarlıyorsunuz.

Önümüzde uzun bir yol var, ama eğlencenin aslında üzerinde yürüdüğünü unutmayın.

İyi işlere devam edin!


4

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.


2

Matematik yapan konsol programınızı alın ve doğru cevabı koyduğunuzda konfeti vurun ... Bu bir oyun haline geldi (Yanımda herkes çocukken Math Blaster oynuyor mu? :)).

Bilgisayarların oyun ortamları oluşturmak için nasıl yapıldığına gelince, zaman zaman kafanızı sarmak biraz daha fazla olabilir, ancak insanın etrafındaki dünyayı anlama anlayışının bir uygulamasıdır. Oyunlar, nasıl çalıştığını açıklamak için çevremizdeki dünyaya başvururken kendilerini tanımlamak için aynı matematik, fizik ve bilimleri kullanır.

Sim oyunları gerçek-sanal için iyi bir örnektir. Uzun zaman önce Sim oyunlarının arkasındaki adamla bir röportaj okudum ve hemen hemen hepsi, istisnasız, etrafımızdaki dünyayı açıklamaya çalışan bir konuyu okumaktan doğdu, daha sonra matematiksel formüller kullanıldı ve sanal bir ortama koyuldu temsil etmek. Örneğin SimCity, ekonomilerin temellerini simüle etmeye çalışmaktan kaynaklandı.

Nasıl bir 3D oyun ortamı yapma özellikleri gelince, içine fizik koymak, bazı ses eklemek, bir kullanıcı onunla etkileşime başlamak için izin .. Peki bu site ve diğerleri burada için ve imkansız olurdu daha spesifik bir cevap olarak özetleyebiliriz.

Günün sonunda video oyunlarını çok hızlı sınırlı veri seti veritabanları olarak tanımlıyorum. İlişkisel verilere ve yüksek hızlı veri erişimine son derece odaklanmışlardır. Yani saniyenin her 60 saniyesinde bir çerçeve oluşturuyorsanız, oyuncunun oyunda nerede olduğuna bağlı olarak büyük miktarlarda veriyi çok hızlı işliyorsunuz demektir. oyun tarafından izlenen diğer tüm verilere :)


Lol, "video oyunları gibi çok hızlı sınırlı veri seti veritabanları" muhtemelen sadece karışıklığa ekliyor.
michael.bartnett

1

Anlamanız gereken matrislerdir. Oyunları destekliyorlar. Matrislerin gücünü anladıktan sonra, oyunların basit matematiğe nasıl indirgeneceğini göreceksiniz.

Oyun alanında köşe pozisyonu alıyorsunuz. Ekrana bir matris kullanarak yansıtın (ekran koordinatlarını bulun). Onun ve komşu köşeleri arasında bazı pikselleri enterpolasyonluyorsunuz ve işiniz bitti. Bu açıkça son derece büyük bir sadeleştirmedir, ancak matrisleri okuduktan sonra rasterleştirmenin temelleri hiç de karmaşık değildir.

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.