Şimdi Ara

C# XNA & oyun mantığı

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
11
Cevap
0
Favori
1.964
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar XNA'de gerçekten çok yeniyim; yani şuan mario kadar basit fiziksel yazılımlar gerektircek bir oyun yapabilecek durumdayım(yerçekimi, zıplama, sağa sola gitme, kutularda durma, kutuya çarpma vb.) fakat mesela sınırsızlık kavramını bilmiyorum örneğin ateş edilecek bir oyun yapamam. Yani yaparım fakat sınırsız olmaz, işte şarjör kadar kurşun dizisi yazar daha sonra ona kurşun grafiği veririm bunu ateş ettiririm fakat mesela sınırsız ateş edilebilen bir oyun yapmayı bilmiyorum sınırsızlık konusunda yardım edebilecek olan varmı? while(true) ile böyle birşey yapılmaz değilmi??



  • arraylist senin ilacın, araştır.

    ayrıca nesne yönelimli programlamayı iyi kavraman lazım. sıkıntın burda.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-E41040413 -- 18 Nisan 2011; 19:46:38 >
  • Sen şarjörü boşaltana kadar ateş ettir hele. Sonra kurşunu bitmeyen silahta yaparsın.
  • dediğim gibi onu yapmayı biliyorum ama teşekkürler yine de arraylist i araştıracağım fakat derdimi doğru anlattım değilmi? ben sonsuz istiyorum.
  • Arkadaşım kızma ama bu nasıl bir oyun geliştirme mantığıdır. Belliki senin aklında herşeyin koşul ve döngülerle kontrol edildiği bir yapı var. Bu şekilde en basit oyunda dahi işin içinden çıkamazsın. Senin ilacın oop (özellikle kalıtım) ve modülerlik.

    Önce ekranda hareket edecek herşey için temel bir nesneye ihtiyacın olacak. Sonra diyelimki ateş eden varlıklar gerekiyor. Hemen bu temel sınıftan bir alt sınıf türetip gerekli özellikleri kazandıracaksın. Kalıtım yoluyla üst sınıfın özelliklerini otomatikman kazanacağın için birdaha bunlarla uğraşmana gerek kalmayacak.

    Grafiksel bir nesnenin animasyonu, gücü, yetenekleri, zaafları, herşeyi sınıf içinde önceden tanımlı olacak. Nesneye "ateş et" komutu gittiği zaman varsayılan olarak silahı kaldırır ve tetiği çeker. Fakat ateş alması bir koşula bağlıdır. Bu koşulu kontrol etmek için bir boolean ve bir integer a ihtiyaç var. Bunlar sınıfın özelliklerinde şu şekide kayıtlı olsun:
    bool sonsuz_mermi;
    int sarjor_kap;

    Şöyle bir koşul iş görür:
    if(sonsuz_mermi || sarjor_kap--)
    atesEt(); // Ateş alma animasyonunu çalıştır.

    Bu koşula göre nesnenin "sonsuz_mermi" özelliği aktif (true) ise artık şarjörde mermi olup olmaması önemli değildir. Yok eğer pasifse mermi olup olmadığına bakılır, varsa ateş edilir. Ta ki şarjör boşalana kadar.

    Sonsuz mermi özelliğini aktif etmek için "ateş eden hareketli grafik" sınıfına bir metod eklersin ve oyunda önceden belirlenmiş bir hilenin açılması durumunda bu metodu çağırırsın.

    Veya başka bir yol da sorgusuz sualsiz ateş eden bir nesne türetmek. Böylece ek bir özellik gerektirmeden (sadece basit bir animasyon) işi kotarabilirsin.

    Kısacası söylemek istediğim sen oop çalış. Kalıtım ve çokbiçimlilik (bu da ayrı bir dünya) kullanan programlar yaz ve modüler programlamayı araştır. Unutma sen nesneyi bir kere oluşturursun ve ondan sınırsız örnek çıkartabilirsin. Örneklerin herbiri kendi işini kendi görecek kapasiteye sahip olur.




  • :) Anladım ama yani classlar, ilişkileri falan bunları az çok biliyorum, beni anlamışsın ve sorduğum şeyi de cevaplamışsın teşekkür ederim :)
  • XNA Framework'da 2 adet özel metod/yordam vardır.Bunlar update() ile draw() metodlarıdır.

    Framework tarafından otomatik olarak update() metodu saniyede 60 kez çağrılır(varsayılan değerdir,isterseniz artırabilirisiniz),bu şu demek 1000 ms/ 60 =16.6 ms de bir güncelleme demektir.Bu değeri artırmak yada azaltmak istersen update() içerisinde bir çarpan kullanırsın ,mesela 0.016 ile bu şekilde 1 sn de bir güncelleme yapmış olursun.
    draw() metodu ise ekranın tazeleme oranına bağlı olarak update() metodu ile uyumlu olmaya çalışır,aynı şekilde XNA Framework tarafından otomatik olarak update() metoduna yakın hızda çağrılır.

    Eğer draw() metodu içerisinde herhangi bir kontrole bağlı olmadan birşey ekrana çizdirirsen ,oyun çalıştığı sürece bunu çizer.

    Bu noktada,kontrolleri update() metodu içerisinde yaparsın.

    Mesela,draw() metodu içierinde çizdirilen bir 2D veya 3D nesnesini döndürmek,klavyeden veya mouse tıklaması ile döndürme ,hareket ettirmek gibi.

    Eğer ekranda belli bir süre görünmesini istiyorsan zamana bağlı olarak bir döngü içerisine koyar o şekilde çizdirirsin.

    Aynı şekilde update() metodu içerisinde başka metodlar da çağırarak daha kompleks işler yapabilirsin.

    Internet üzerinde bu konularda çok güzel örnekler/görsel eğitimler var.

    Edit:imla



    < Bu mesaj bu kişi tarafından değiştirildi fenasi44 -- 19 Nisan 2011; 2:48:53 >




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • http://code.google.com/p/xnaspacegame/

    Açık kaynak kodlu, yazdığım basit ama fonksiyonel bir space shooter ( 5-6 saatimi aldı )

    XNA 3.1 ile yazdım, 4.0 a çevirmek bi kaç değişiklik ister ama asıl mantığı zaten C# kodu.

    Incelersen öğrenirsin, kolay gelsin.
  • quote:

    Orijinalden alıntı: fenasi44

    XNA Framework'da 2 adet özel metod/yordam vardır.Bunlar update() ile draw() metodlarıdır.

    Framework tarafından otomatik olarak update() metodu saniyede 60 kez çağrılır(varsayılan değerdir,isterseniz artırabilirisiniz),bu şu demek 1000 ms/ 60 =16.6 ms de bir güncelleme demektir.Bu değeri artırmak yada azaltmak istersen update() içerisinde bir çarpan kullanırsın ,mesela 0.016 ile bu şekilde 1 sn de bir güncelleme yapmış olursun.
    draw() metodu ise ekranın tazeleme oranına bağlı olarak update() metodu ile uyumlu olmaya çalışır,aynı şekilde XNA Framework tarafından otomatik olarak update() metoduna yakın hızda çağrılır.

    Eğer draw() metodu içerisinde herhangi bir kontrole bağlı olmadan birşey ekrana çizdirirsen ,oyun çalıştığı sürece bunu çizer.

    Bu noktada,kontrolleri update() metodu içerisinde yaparsın.

    Mesela,draw() metodu içierinde çizdirilen bir 2D veya 3D nesnesini döndürmek,klavyeden veya mouse tıklaması ile döndürme ,hareket ettirmek gibi.

    Eğer ekranda belli bir süre görünmesini istiyorsan zamana bağlı olarak bir döngü içerisine koyar o şekilde çizdirirsin.

    Aynı şekilde update() metodu içerisinde başka metodlar da çağırarak daha kompleks işler yapabilirsin.

    Internet üzerinde bu konularda çok güzel örnekler/görsel eğitimler var.

    Edit:imla





    Tamam teşekkürler. Bu süre olayını gameTime dan mı arttıracağız yoksa update metodu içinde tekrar update i mi çağıracağız?




  • quote:

    Orijinalden alıntı: sehlor

    http://code.google.com/p/xnaspacegame/

    Açık kaynak kodlu, yazdığım basit ama fonksiyonel bir space shooter ( 5-6 saatimi aldı )

    XNA 3.1 ile yazdım, 4.0 a çevirmek bi kaç değişiklik ister ama asıl mantığı zaten C# kodu.

    Incelersen öğrenirsin, kolay gelsin.

    Oyunu oynamıştım fakat o sıralar XNA den hiç birşey bilmediğim için bakmadım kaynak koda şimdi bakacağım teşekkürler..
  • http://www.youtube.com/watch?v=jb0uFDmgxeM XNA ile Shooter tarzı ilk oyun denemem,Nesneye Yönelik Programlama olmadan işin içinden çıkmak çok zor,Aklınıza gelen bütün oyun içi varlıkları adına aklınıza gelen bütün işlevleri tanımlayabileceğiniz genelden özele doğru giden bir sınıf hiyerarşisi oluşturmanız önemli
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.