Saya mencoba menulis SpriteManager
kelas di XNA, tetapi saya perlu akses ke Game
variabel. Misalnya, Game.Content
properti akan sangat membantu dalam memuat tekstur, dan Game.GraphicsDevice.Viewport
akan sangat membantu dalam mendapatkan ukuran jendela.
Untuk saat ini, saya memiliki kelas berikut:
public MainGame : DrawableGameComponent
{
public SpriteManager<Enemy> EnemyManager { get; get; }
public SpriteManager<Powerup> PowerupManager { get; set; }
...
}
Saya dapat memikirkan tiga cara untuk mendapatkan akses ke variabel-variabel ini di SpriteManager
kelas:
Buat kelas manajer sprite saya berasal
GameComponent
. Ini akan ideal, kecuali bahwa sprite manager saya digunakanMainGame
, yaitu aGameComponent
.Gunakan
((Game) Game1)
untuk mengakses variabel. Namun, melakukan pemeran seperti ini jelek dan merusak enkapsulasi.Catat semuanya dari
MainGame
. Misalnya,EnemyManager
perlu untuk memuat musuh acak ketik setiap kali memunculkan musuh, jadi bukan memuat tekstur diMainGame
, lulusEnemyManager
padaGame.Content
properti dan biarkan menangani tekstur pemuatan. Namun, saya tidak yakin apakah ini cara terbaik untuk menangani situasi ini. Saya tidak bisa meletakkan jari saya di atasnya, tetapi sepertinya 'salah' dalam beberapa hal.
Saya bisa menggunakan beberapa saran tentang cara terbaik untuk mencapai ini.
Sebenarnya # 2 tidak begitu buruk (saya akan berasumsi Anda bermaksud down-cast dari
Game
keGame1
). Anda bisa memberlakukan tipe yang adaGame1
di konstruktor Anda seperti:Anda bahkan bisa membuat properti yang nyaman seperti ini. Itu akan selalu aman, asalkan yang mendasarinya
DrawableGameComponent
tidak melakukan apa pun tanpa dokumen.Atau jika Anda ingin menjadi sangat anal tentang tidak casting (dan benar-benar tidak perlu ), Anda bisa melakukan ini:
sumber