Jadi saya akhirnya sempat bermain-main dengan XNA dan telah bermain-main dengan membuat game 2D (Saya memiliki banyak aset seni dari seorang teman yang mengembangkannya di iOS)
Banyak hal yang tampaknya mudah dilakukan dan keluar dari kotak, tetapi saya bingung karena banyak literatur (buku yang saya beli misalnya) tidak terlalu memperhatikan 2D.
Saya sangat menghargai klarifikasi atau diarahkan ke informasi lebih lanjut tentang pencarian berikut:
Apa gunanya Layanan Game? Saya memahami seluruh idiom mendaftarkan suatu objek sebagai layanan sehingga setiap GameComponent lain dapat mengambilnya, namun bagaimana cara mengalahkannya dengan membuatnya menjadi publik atau statis? Sebagai contoh, buku saya merekomendasikan mendaftarkan objek SpriteBatch di kelas Game.cs. Saya tidak yakin bagaimana ini lebih baik daripada membuatnya menjadi publik / statis karena seharusnya hanya ada satu contoh Game (tunggal)?
Saya bingung kapan saya harus mewarisi dari GameComponent atau RenderableGameComponent. Saya mencoba mengikuti desain Manajer / Pengendali, sehingga semua entitas dibuat / dimiliki oleh satu manajer dan sama untuk hal-hal lain. Saat ini saya memiliki setiap Manajer / Pengendali yang mewarisi dari GameComponent, namun bagaimana hal ini mengalahkan memiliki objek Game yang memiliki semua Manajer dan secara manual memanggil pembaruan pada mereka dan menggambar?
Saya perhatikan bahwa Inisialisasi dipanggil sebelum ContentLoad (), saya menemukan ini menjengkelkan karena di Inisialisasi saya adalah di mana saya ingin membuat beberapa entitas saya (yaitu Sprite, Player dll.), Namun saya tidak bisa memberi mereka dimuat SpriteSheets atau Textures karena panggilan untuk memuatnya belum terjadi. Apakah saya mungkin melakukan inisialisasi yang salah atau apakah orang hanya menetapkan tekstur lebih jauh di ContentLoad?
Tampaknya itu adalah " WTF " terbesar saya yang tidak terlalu mengerti
sumber
SpriteBatch.Draw
ditentukan dalam koordinat tekstur-piksel relatif ke kiri atas tekstur (atau persegi panjang sumber, jika Anda menggunakannya).public
/static
properti. Mengapa? Testabilitas. Hampir mustahil untuk mengubah hal-hal dengan pendekatan properti, sedangkan itu sepele jika semuanya diinisialisasi denganIServiceProvider
yang dapat diisi dengan apa pun yang dibutuhkan kelas dengan metode pengujian Anda. Itu juga menghindari perlunya instantiateGame
objek itu sendiri dalam pengujian Anda, yang menjadi berantakan sangat cepat.Game
objek. Mereka kebetulan diakses melalui antarmuka yang didorong keGame.Services
yang kemudian akan diteruskan ke segala sesuatu untuk mendapatkan apa yang mereka butuhkan lagi.Untuk pertanyaan pertama Anda, saya harus mengakui bahwa saya tidak tahu jawaban yang sebenarnya. Saya kira itu akan menjadi alasan yang sama mengapa singleton umumnya merupakan pola desain yang buruk. Saya akan mengarahkan Anda ke kutipan dari tautan ini :
Untuk pertanyaan kedua Anda, saya anggap menggunakan Komponen seperti ini akan lebih berguna jika Anda akan mengikuti pendekatan berbasis komponen , seolah-olah Anda akan memiliki daftar
Sprite
komponen yang akan tahu cara menggambar dan memperbarui sendiri daripada manajer yang tahu cara memperbarui dan menggambar setiap sprite. Saya setuju, kedengarannya sama tetapi saya lebih suka desain berbasis komponen karena saya sangat suka pendekatan berorientasi objek yang dimilikinya.Untuk pertanyaan ketiga Anda, ya, Anda harus memuat segala bentuk konten (aset, font, dll.) Dalam metode LoadContent. Adapun inisialisasi, Anda biasanya akan membuat objek Player dalam fungsi Inisialisasi dan kemudian memuat kontennya dalam LoadContent .. Atau Anda bisa melakukan semuanya dalam LoadContent jika Anda mau.
sumber